2 require_once 'lib/WikiDB/backend.php';
5 * An inefficient but general most_popular iterator.
7 * This iterator will work with any backend which implements the
8 * backend::get_all_pages() and backend::get_pagedata()
11 class WikiDB_backend_dumb_MostPopularIter
12 extends WikiDB_backend_iterator
14 function WikiDB_backend_dumb_MostPopularIter($backend, &$all_pages, $limit)
16 $this->_pages = array();
17 $pages = &$this->_pages;
19 while ($page = $all_pages->next()) {
20 if (!isset($page['pagedata']))
21 $page['pagedata'] = $backend->get_pagedata($page['pagename']);
25 if ($limit < 0) { //sort pages in reverse order - ie least popular first.
26 usort($pages, 'WikiDB_backend_dumb_MostPopularIter_sortf_rev');
28 } else usort($pages, 'WikiDB_backend_dumb_MostPopularIter_sortf');
31 $pages = array_reverse($pages);
35 if ($limit && $limit < count($pages))
36 array_splice($pages, $limit);
41 return array_shift($this->_pages);
50 function WikiDB_backend_dumb_MostPopularIter_sortf($a, $b)
53 if (isset($a['pagedata']['hits']))
54 $ahits = (int)$a['pagedata']['hits'];
55 if (isset($b['pagedata']['hits']))
56 $bhits = (int)$b['pagedata']['hits'];
57 return $bhits - $ahits;
60 function WikiDB_backend_dumb_MostPopularIter_sortf_rev($a, $b)
63 if (isset($a['pagedata']['hits']))
64 $ahits = (int)$a['pagedata']['hits'];
65 if (isset($b['pagedata']['hits']))
66 $bhits = (int)$b['pagedata']['hits'];
67 return $ahits - $bhits;
74 // c-hanging-comment-ender-p: nil
75 // indent-tabs-mode: nil