]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/backend/dumb/MostRecentIter.php
Jeff's hacks II.
[SourceForge/phpwiki.git] / lib / WikiDB / backend / dumb / MostRecentIter.php
1 <?php // -*-php-*-
2 rcs_id('$Id: MostRecentIter.php,v 1.1 2001-09-18 19:16:23 dairiki 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         extract($params);
17         if ($exclude_major_revisions)
18             $include_minor_revisions = true;
19
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                 assert(is_array($vdata));
26                 if (!empty($vdata['is_minor_edit'])) {
27                     if (!$include_minor_revisions)
28                         continue;
29                 }
30                 else {
31                     if ($exclude_major_revisions)
32                         continue;
33                 }
34                 if (!empty($since) && $vdata['mtime'] < $since)
35                     break;
36
37                 $this->_revisions[] = $revision;
38
39                 if (!$include_all_revisions)
40                     break;
41             }
42             $revs->free();
43         }
44         
45         usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf');
46         if (!empty($limit) && $limit < count($this->_revisions))
47             array_splice($this->_revisions, $limit);
48     }
49     
50     function next() {
51         return array_shift($this->_revisions);
52     }
53     
54     function free() {
55         unset($this->_revisions);
56     }
57 }
58
59 function WikiDB_backend_dumb_MostRecentIter_sortf($a, $b) {
60     $acreated = $a['versiondata']['mtime'];
61     $bcreated = $b['versiondata']['mtime'];
62     return $bcreated - $acreated;
63 }
64
65 // (c-file-style: "gnu")
66 // Local Variables:
67 // mode: php
68 // tab-width: 8
69 // c-basic-offset: 4
70 // c-hanging-comment-ender-p: nil
71 // indent-tabs-mode: nil
72 // End:   
73 ?>