2 require_once 'lib/WikiDB/backend.php';
5 * An inefficient but general most_recent iterator.
7 * This iterator will work with any backends.
9 class WikiDB_backend_dumb_MostRecentIter
10 extends WikiDB_backend_iterator
12 function WikiDB_backend_dumb_MostRecentIter(&$backend, &$pages, $params) {
15 if ($exclude_major_revisions)
16 $include_minor_revisions = true;
18 $reverse = $limit < 0;
19 if($reverse){$limit = -$limit;}
20 $this->_revisions = array();
21 while ($page = $pages->next()) {
22 $revs = $backend->get_all_revisions($page['pagename']);
23 while ($revision = $revs->next()) {
24 $vdata = &$revision['versiondata'];
25 if (!$vdata) continue;
26 assert(is_array($vdata));
27 if (empty($vdata['mtime'])) {
30 if (!empty($vdata['is_minor_edit'])) {
31 if (!$include_minor_revisions)
35 if ($exclude_major_revisions)
38 if (!empty($since) && $vdata['mtime'] < $since)
41 $this->_revisions[] = $revision;
43 if (!$include_all_revisions)
49 usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf_rev');
51 usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf');
53 if (!empty($limit) && $limit < count($this->_revisions)) {
54 array_splice($this->_revisions, $limit);
59 return array_shift($this->_revisions);
63 unset($this->_revisions);
67 function WikiDB_backend_dumb_MostRecentIter_sortf($a, $b) {
68 $acreated = $a['versiondata']['mtime'];
69 $bcreated = $b['versiondata']['mtime'];
70 return $bcreated - $acreated;
73 function WikiDB_backend_dumb_MostRecentIter_sortf_rev($a, $b) {
74 $acreated = $a['versiondata']['mtime'];
75 $bcreated = $b['versiondata']['mtime'];
76 return $acreated - $bcreated;
83 // c-hanging-comment-ender-p: nil
84 // indent-tabs-mode: nil