2 rcs_id('$Id: RandomPage.php,v 1.7 2002-01-31 01:34:02 carstenklapp Exp $');
4 require_once('lib/PageList.php');
8 class WikiPlugin_RandomPage
12 return _("RandomPage");
15 function getDescription () {
16 return _("RandomPage");
19 function getDefaultArguments() {
20 return array('pages' => 1,
22 'hidename' => false, // only for pages=1
23 'exclude' => $this->default_exclude(),
27 function run($dbi, $argstr, $request) {
28 extract($this->getArgs($argstr, $request));
30 $allpages = $dbi->getAllPages();
32 $exclude = $exclude ? explode(",", $exclude) : array();
34 while ($page = $allpages->next()) {
35 if (!in_array($page->getName(), $exclude))
39 better_srand(); // Start with a good seed.
41 if ($pages == 1 && $pagearray) {
42 $page = $pagearray[array_rand($pagearray)];
44 $request->redirect(WikiURL($page, false, 'absurl')); // noreturn
46 return WikiLink($page, false, _("RandomPage"));
48 return WikiLink($page);
51 $pages = min( max(1, (int)$pages), 20, count($pagearray));
52 $pagelist = new PageList($info);
53 $shuffle = array_rand($pagearray, $pages);
54 foreach ($shuffle as $i)
55 $pagelist->addPage($pagearray[$i]);
59 function default_exclude() {
60 // Some useful default pages to exclude.
61 $default_exclude = 'RandomPage,HomePage,AllPages,RecentChanges,RecentEdits,FullRecentChanges';
62 foreach (explode(",", $default_exclude) as $e) {
63 $_exclude[] = gettext($e);
65 return implode(",", $_exclude);
74 // c-hanging-comment-ender-p: nil
75 // indent-tabs-mode: nil