]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/backend/dumb/MostRecentIter.php
RecentChanges plugin now takes $days < 0 and
[SourceForge/phpwiki.git] / lib / WikiDB / backend / dumb / MostRecentIter.php
1 <?php // -*-php-*-
2 rcs_id('$Id: MostRecentIter.php,v 1.2 2002-02-08 22:51:26 lakka 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                 $reverse = $since < 0;
21                 if($reverse){$since = -$since;}
22         $this->_revisions = array();
23         while ($page = $pages->next()) {
24             $revs = $backend->get_all_revisions($page['pagename']);
25             while ($revision = &$revs->next()) {
26                 $vdata = &$revision['versiondata'];
27                 assert(is_array($vdata));
28                 if (!empty($vdata['is_minor_edit'])) {
29                     if (!$include_minor_revisions)
30                         continue;
31                 }
32                 else {
33                     if ($exclude_major_revisions)
34                         continue;
35                 }
36                                 if ($reverse){
37                                     if ($vdata['mtime'] > $since) {
38                                             break;
39                                         }
40                                 }
41                 elseif (!empty($since) && $vdata['mtime'] < $since)
42                     break;
43
44                 $this->_revisions[] = $revision;
45
46                 if (!$include_all_revisions)
47                     break;
48             }
49             $revs->free();
50         }
51         if($reverse){
52                 usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf_rev');
53                 }
54         else usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf');
55         if (!empty($limit) && $limit < count($this->_revisions))
56             array_splice($this->_revisions, $limit);
57     }
58     
59     function next() {
60         return array_shift($this->_revisions);
61     }
62     
63     function free() {
64         unset($this->_revisions);
65     }
66 }
67
68 function WikiDB_backend_dumb_MostRecentIter_sortf($a, $b) {
69     $acreated = $a['versiondata']['mtime'];
70     $bcreated = $b['versiondata']['mtime'];
71     return $bcreated - $acreated;
72 }
73
74 function WikiDB_backend_dumb_MostRecentIter_sortf_rev($a, $b) {
75     $acreated = $a['versiondata']['mtime'];
76     $bcreated = $b['versiondata']['mtime'];
77     return $acreated - $bcreated;
78 }
79
80 // (c-file-style: "gnu")
81 // Local Variables:
82 // mode: php
83 // tab-width: 8
84 // c-basic-offset: 4
85 // c-hanging-comment-ender-p: nil
86 // indent-tabs-mode: nil
87 // End:   
88 ?>