b97cd1d00f56444c088625f77079692927886109
[matthijs/projects/wipi.git] / plugin / macro / RandomPage.py
1 # -*- coding: iso-8859-1 -*-
2 """
3     MoinMoin - RandomPage Macro
4
5     @copyright: 2000 Juergen Hermann <jh@web.de>
6     @license: GNU GPL, see COPYING for details.
7 """
8
9 import random
10 random.seed()
11
12 from MoinMoin.Page import Page
13
14 Dependencies = ["time"]
15
16 def macro_RandomPage(macro, links=1):
17     request = macro.request
18     links = max(links, 1) # at least 1 link
19
20     # Get full page unfiltered page list - very fast!
21     all_pages = request.rootpage.getPageList(user='', exists=0)
22
23     # Now select random page from the full list, and if it exists and we
24     # can read it, save.
25     pages = []
26     found = 0
27     while found < links and all_pages:
28         # Take one random page from the list
29         pagename = random.choice(all_pages)
30         all_pages.remove(pagename)
31
32         # Filter out deleted pages or pages the user may not read.
33         page = Page(request, pagename)
34         if page.exists() and request.user.may.read(pagename):
35             pages.append(pagename)
36             found += 1
37
38     if not pages:
39         return ''
40
41     f = macro.formatter
42
43     # return a single page link
44     if links == 1:
45         name = pages[0]
46         return (f.pagelink(1, name, generated=1) +
47                 f.text(name) +
48                 f.pagelink(0, name))
49
50     # return a list of page links
51     pages.sort()
52     result = []
53     write = result.append
54
55     write(f.bullet_list(1))
56     for name in pages:
57         write(f.listitem(1))
58         write(f.pagelink(1, name, generated=1))
59         write(f.text(name))
60         write(f.pagelink(0, name))
61         write(f.listitem(0))
62     write(f.bullet_list(0))
63
64     result = ''.join(result)
65     return result
66