]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/backend/dumb/MostRecentIter.php
Reformat code
[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     {
14         $limit = false;
15         extract($params);
16         if ($exclude_major_revisions)
17             $include_minor_revisions = true;
18
19         $reverse = $limit < 0;
20         if ($reverse) {
21             $limit = -$limit;
22         }
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                 if (!$vdata) continue;
29                 assert(is_array($vdata));
30                 if (empty($vdata['mtime'])) {
31                     $vdata['mtime'] = 0;
32                 }
33                 if (!empty($vdata['is_minor_edit'])) {
34                     if (!$include_minor_revisions)
35                         continue;
36                 } else {
37                     if ($exclude_major_revisions)
38                         continue;
39                 }
40                 if (!empty($since) && $vdata['mtime'] < $since)
41                     break;
42
43                 $this->_revisions[] = $revision;
44
45                 if (!$include_all_revisions)
46                     break;
47             }
48             $revs->free();
49         }
50         if ($reverse) {
51             usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf_rev');
52         } else {
53             usort($this->_revisions, 'WikiDB_backend_dumb_MostRecentIter_sortf');
54         }
55         if (!empty($limit) && $limit < count($this->_revisions)) {
56             array_splice($this->_revisions, $limit);
57         }
58     }
59
60     function next()
61     {
62         return array_shift($this->_revisions);
63     }
64
65     function free()
66     {
67         unset($this->_revisions);
68     }
69 }
70
71 function WikiDB_backend_dumb_MostRecentIter_sortf($a, $b)
72 {
73     $acreated = $a['versiondata']['mtime'];
74     $bcreated = $b['versiondata']['mtime'];
75     return $bcreated - $acreated;
76 }
77
78 function WikiDB_backend_dumb_MostRecentIter_sortf_rev($a, $b)
79 {
80     $acreated = $a['versiondata']['mtime'];
81     $bcreated = $b['versiondata']['mtime'];
82     return $acreated - $bcreated;
83 }
84
85 // Local Variables:
86 // mode: php
87 // tab-width: 8
88 // c-basic-offset: 4
89 // c-hanging-comment-ender-p: nil
90 // indent-tabs-mode: nil
91 // End: