0byt3m1n1
Path:
/
data
/
applications
/
aps
/
phpwiki
/
1.4.0-0
/
standard
/
htdocs
/
lib
/
plugin
/
[
Home
]
File: RecentComments.php
<?php // -*-php-*- // rcs_id('$Id: RecentComments.php 7638 2010-08-11 11:58:40Z vargenau $'); /* * Copyright (C) 2004 $ThePhpWikiProgrammingTeam * * This file is part of PhpWiki. * * PhpWiki is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * PhpWiki is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PhpWiki; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** * List of basepages with recently added comments. * Idea from http://www.wakkawiki.com/RecentlyCommented * @author: Reini Urban */ require_once("lib/plugin/RecentChanges.php"); require_once("lib/plugin/WikiBlog.php"); class WikiPlugin_RecentComments extends WikiPlugin_RecentChanges { function getName () { return _("RecentComments"); } function getDescription () { return _("List basepages with recently added comments."); } function getDefaultArguments() { $args = parent::getDefaultArguments(); $args['show_minor'] = false; $args['show_all'] = true; $args['caption'] = _("Recent Comments"); return $args; } function format ($changes, $args) { $fmt = new _RecentChanges_CommentFormatter($args); $fmt->action = _("RecentComments"); return $fmt->format($changes); } function run($dbi, $argstr, &$request, $basepage) { $args = $this->getArgs($argstr, $request); // HACKish: fix for SF bug #622784 (1000 years of RecentChanges ought // to be enough for anyone.) $args['days'] = min($args['days'], 365000); return $this->format($this->getChanges($request->_dbi, $args), $args); } function getChanges ($dbi, $args) { $changes = $dbi->mostRecent($this->getMostRecentParams($args)); $show_deleted = $args['show_deleted']; if ($show_deleted == 'sometimes') $show_deleted = $args['show_minor']; if (!$show_deleted) $changes = new NonDeletedRevisionIterator($changes, !$args['show_all']); // sort out pages with no comments $changes = new RecentCommentsRevisionIterator($changes, $dbi); return $changes; } } class _RecentChanges_CommentFormatter extends _RecentChanges_HtmlFormatter { function empty_message () { return _("No comments found"); } function title() { return; } function format_revision ($rev) { static $doublettes = array(); if (isset($doublettes[$rev->getPageName()])) return; $doublettes[$rev->getPageName()] = 1; $args = &$this->_args; $class = 'rc-' . $this->importance($rev); $time = $this->time($rev); if (! $rev->get('is_minor_edit')) $time = HTML::strong(array('class' => 'pageinfo-majoredit'), $time); $line = HTML::li(array('class' => $class)); if ($args['difflinks']) $line->pushContent($this->diffLink($rev), ' '); if ($args['historylinks']) $line->pushContent($this->historyLink($rev), ' '); $line->pushContent($this->pageLink($rev), ' ', $time, ' ', ' . . . . ', _("latest comment by "), $this->authorLink($rev)); return $line; } } /** * List of pages which have comments * i.e. sort out all non-commented pages. */ class RecentCommentsRevisionIterator extends WikiDB_PageRevisionIterator { function RecentCommentsRevisionIterator ($revisions, &$dbi) { $this->_revisions = $revisions; $this->_wikidb = $dbi; $this->_current = 0; $this->_blog = new WikiPlugin_WikiBlog(); } function next () { if (!empty($this->comments) and $this->_current) { if (isset($this->comments[$this->_current])) { return $this->comments[$this->_current++]; } else { $this->_current = 0; } } while (($rev = $this->_revisions->next())) { $this->comments = $this->_blog->findBlogs($this->_wikidb, $rev->getPageName(), 'comment'); if ($this->comments) { if (count($this->comments) > 2) usort($this->comments, array("WikiPlugin_WikiBlog", "cmp")); if (isset($this->comments[$this->_current])) { //$this->_current++; return $this->comments[$this->_current++]; } } else { $this->_current = 0; } } $this->free(); return false; } } // Local Variables: // mode: php // tab-width: 8 // c-basic-offset: 4 // c-hanging-comment-ender-p: nil // indent-tabs-mode: nil // End: ?>