2 rcs_id('$Id: MostRecentIter.php,v 1.5 2004-01-25 08:17:30 rurban Exp $');
4 require_once('lib/WikiDB/backend.php');
8 * An inefficient but general most_recent iterator.
10 * This iterator will work with any backends.
12 class WikiDB_backend_dumb_MostRecentIter
13 extends WikiDB_backend_iterator
15 function WikiDB_backend_dumb_MostRecentIter(&$backend, &$pages, $params) {
18 if ($exclude_major_revisions)
19 $include_minor_revisions = true;
21 $reverse = $limit < 0;
22 if($reverse){$limit = -$limit;}
23 $this->_revisions = array();
24 while ($page = $pages->next()) {
25 $revs = $backend->get_all_revisions($page['pagename']);
26 while ($revision = &$revs->next()) {
27 $vdata = &$revision['versiondata'];
28 assert(is_array($vdata));
29 if (!empty($vdata['is_minor_edit'])) {
30 if (!$include_minor_revisions)
34 if ($exclude_major_revisions)
37 if (!empty($since) && $vdata['mtime'] < $since)
40 $this->_revisions[] = $revision;
42 if (!$include_all_revisions)
48 usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf_rev');
50 else usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf');
51 if (!empty($limit) && $limit < count($this->_revisions))
52 array_splice($this->_revisions, $limit);
56 return array_shift($this->_revisions);
60 unset($this->_revisions);
64 function WikiDB_backend_dumb_MostRecentIter_sortf($a, $b) {
65 $acreated = $a['versiondata']['mtime'];
66 $bcreated = $b['versiondata']['mtime'];
67 return $bcreated - $acreated;
70 function WikiDB_backend_dumb_MostRecentIter_sortf_rev($a, $b) {
71 $acreated = $a['versiondata']['mtime'];
72 $bcreated = $b['versiondata']['mtime'];
73 return $acreated - $bcreated;
76 // (c-file-style: "gnu")
81 // c-hanging-comment-ender-p: nil
82 // indent-tabs-mode: nil