20, // was pages 'pages' => false, // deprecated 'redirect' => false, 'hidename' => false, // only for numpages=1 'exclude' => $this->default_exclude(), 'info' => '')); } function run($dbi, $argstr, &$request, $basepage) { $args = $this->getArgs($argstr, $request); extract($args); // Redirect would break HTML dump if ($request->getArg('action') != 'browse') { return $this->disabled(_("Plugin not run: not in browse mode")); } // fix deprecated arg if (is_integer($pages)) { $numpages = $pages; $pages = false; // fix new pages handling in arg preprozessor. } elseif (is_array($pages)) { $numpages = (int)$pages[0]; if ($numpages > 0 and !$dbi->isWikiPage($numpages)) $pages = false; else $numpages = 1; } $allpages = $dbi->getAllPages(false, $sortby, $limit, $exclude); $pagearray = $allpages->asArray(); better_srand(); // Start with a good seed. if (($numpages == 1) && $pagearray) { $page = $pagearray[array_rand($pagearray)]; $pagename = $page->getName(); if ($redirect) $request->redirect(WikiURL($pagename, false, 'absurl')); // noreturn if ($hidename) return WikiLink($pagename, false, _("RandomPage")); else return WikiLink($pagename); } $numpages = min( max(1, (int) $numpages), 20, count($pagearray)); $pagelist = new PageList($info, $exclude, $args); $shuffle = array_rand($pagearray, $numpages); if (is_array($shuffle)) { foreach ($shuffle as $i) if (isset($pagearray[$i])) $pagelist->addPage($pagearray[$i]); } else { // if $numpages = 1 if (isset($pagearray[$shuffle])) $pagelist->addPage($pagearray[$shuffle]); } return $pagelist; } function default_exclude() { // Some useful default pages to exclude. $default_exclude = 'RandomPage,HomePage,AllPages,RecentChanges,RecentEdits,FullRecentChanges'; foreach (explode(",", $default_exclude) as $e) { $exclude[] = gettext($e); } return implode(",", $exclude); } }; // Local Variables: // mode: php // tab-width: 8 // c-basic-offset: 4 // c-hanging-comment-ender-p: nil // indent-tabs-mode: nil // End: