2 rcs_id('$Id: RecentChanges.php,v 1.5 2001-12-11 22:45:39 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);
29 $params['since'] = time() - 24 * 3600 * $days;
31 $changes = $dbi->mostRecent($params);
33 if ($request->getArg('action') != 'browse')
34 $format = false; // default -> HTML
40 header("Content-Type: application/xml; charset=" . RSS_ENCODING);
42 $xml = $this->__format_as_rss($changes, $args, $request);
43 printf("<?xml version=\"1.0\" encoding=\"%s\"?>\n", RSS_ENCODING);
44 printf("<!-- Generated by PhpWiki:\n%s-->\n", $GLOBALS['RCS_IDS']);
49 return $this->__format_as_html($changes, $args, $request);
54 function __format_as_html($changes, $args, $request) {
57 global $WikiNameRegexp;
62 $diffargs = array('action' => 'diff');
64 // FIXME: add XML icon (and link) to title?
65 $rss_url = $request->getURLtoSelf(array('format' => 'rss'));
66 $rss_icon = Element('a', array('href' => $rss_url),
67 Element('img', array('src' => DataURL('images/rss.png'),
68 'alt' => 'RSS available',
69 'class' => 'linkicon')));
71 $html = Element('h3', htmlspecialchars(_("RecentChanges")) . " $rss_icon");
73 $limit = $args['limit'];
74 while ($rev = $changes->next()) {
75 $created = $rev->get('mtime');
76 $date = strftime($dateformat, $created);
77 $time = strftime("%l:%M %p", $created); // Make configurable.
78 if ($date != $last_date) {
80 $html .= Element('ul', join("\n", $lines));
83 $html .= Element('p',QElement('b', $date));
87 $page = $rev->getPage();
88 $pagename = $page->getName();
90 if ($args['show_all']) {
91 // FIXME: should set previous, too, if showing only minor or major revs.
93 $diffargs['version'] = $rev->getVersion();
97 array('href' => WikiURL($pagename, $diffargs)),
100 $wikipage = LinkWikiWord($page->getName());
102 $author = $rev->get('author');
103 if (preg_match("/^$WikiNameRegexp\$/", $author))
104 $author = LinkWikiWord($author);
106 $author = htmlspecialchars($author);
108 $summary = $rev->get('summary');
110 $summary = QElement('b', "[$summary]");
112 $lines[] = Element('li',
113 "$diff $wikipage $time $summary ... $author");
115 if ($limit && --$limit <= 0)
119 $html .= Element('ul', join("\n", $lines));
124 function __format_as_rss($changes, $args, $request) {
125 include_once('lib/RssWriter.php');
126 $rss = new RssWriter;
127 $rc_url = WikiURL($request->getArg('pagename'), false, 'absurl');
129 $chan = array('title' => WIKI_NAME,
130 'dc:description' => _("RecentChanges"),
132 'dc:date' => Iso8601DateTime(time()));
134 /* FIXME: other things one might like in <channel>:
143 * rss091:managingEditor
145 * rss091:lastBuildDate
149 $rss->channel($chan, $rc_url);
151 $rss->image(array('title' => 'PhpWiki', // FIXME: this should be a config define
152 'link' => WikiURL(_("HomePage"), false, 'absurl'),
153 'url' => DataURL($GLOBALS['logo'])));
155 $rss->textinput(array('title' => _("Search"),
156 'description' => _("Title Search"),
158 'link' => WikiURL(_("TitleSearch"), false, 'absurl')));
160 $limit = $args['limit'];
161 while ($rev = $changes->next()) {
162 $page = $rev->getPage();
165 if ($args['show_all']) {
166 // FIXME: should set previous, too, if showing only minor or major revs.
167 // or maybe difftype.
168 $urlargs['version'] = $rev->getVersion();
171 $pagename = $page->getName();
173 $item = array('title' => split_pagename($pagename),
174 'description' => $rev->get('summary'),
175 'link' => WikiURL($pagename, $urlargs, 'absurl'),
176 'dc:date' => Iso8601DateTime($rev->get('mtime')),
177 'dc:contributor' => $rev->get('author'),
178 'wiki:version' => $rev->getVersion(),
179 'wiki:importance' => $rev->get('is_minor_edit') ? 'minor' : 'major',
180 // wiki:status = 'new' | 'updated' | 'deleted'
181 'wiki:diff' => WikiURL($pagename,
182 array_merge($urlargs,
183 array('action' => 'diff',
184 'previous' => 'major')),
186 'wiki:history' => WikiURL($pagename,
187 array('action' => 'info'),
192 $uri = WikiURL($pagename, array('version' => $rev->getVersion()), 'absurl');
193 $rss->addItem($item, $uri);
195 if ($limit && --$limit <= 0)
199 return $rss->asXML();
204 // (c-file-style: "gnu")
209 // c-hanging-comment-ender-p: nil
210 // indent-tabs-mode: nil