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