]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/backend/dumb/MostRecentIter.php
Remove svn:keywords
[SourceForge/phpwiki.git] / lib / WikiDB / backend / dumb / MostRecentIter.php
1 <?php
2 require_once 'lib/WikiDB/backend.php';
3
4 /**
5  * An inefficient but general most_recent iterator.
6  *
7  * This iterator will work with any backends.
8  */
9 class WikiDB_backend_dumb_MostRecentIter
10 extends WikiDB_backend_iterator
11 {
12     function WikiDB_backend_dumb_MostRecentIter(&$backend, &$pages, $params) {
13         $limit = false;
14         extract($params);
15         if ($exclude_major_revisions)
16             $include_minor_revisions = true;
17
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'])) {
28             $vdata['mtime'] = 0;
29         }
30                 if (!empty($vdata['is_minor_edit'])) {
31                     if (!$include_minor_revisions)
32                         continue;
33                 }
34                 else {
35                     if ($exclude_major_revisions)
36                         continue;
37                 }
38                 if (!empty($since) && $vdata['mtime'] < $since)
39                     break;
40
41                 $this->_revisions[] = $revision;
42
43                 if (!$include_all_revisions)
44                     break;
45             }
46             $revs->free();
47         }
48         if ($reverse) {
49             usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf_rev');
50         } else {
51             usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf');
52         }
53         if (!empty($limit) && $limit < count($this->_revisions)) {
54             array_splice($this->_revisions, $limit);
55         }
56     }
57
58     function next() {
59         return array_shift($this->_revisions);
60     }
61
62     function free() {
63         unset($this->_revisions);
64     }
65 }
66
67 function WikiDB_backend_dumb_MostRecentIter_sortf($a, $b) {
68     $acreated = $a['versiondata']['mtime'];
69     $bcreated = $b['versiondata']['mtime'];
70     return $bcreated - $acreated;
71 }
72
73 function WikiDB_backend_dumb_MostRecentIter_sortf_rev($a, $b) {
74     $acreated = $a['versiondata']['mtime'];
75     $bcreated = $b['versiondata']['mtime'];
76     return $acreated - $bcreated;
77 }
78
79 // Local Variables:
80 // mode: php
81 // tab-width: 8
82 // c-basic-offset: 4
83 // c-hanging-comment-ender-p: nil
84 // indent-tabs-mode: nil
85 // End: