data/plugin/macro/UserList.py
author Reimar Bauer <rb.proj AT googlemail DOT com>
Thu, 18 Mar 2010 11:23:11 +0100
changeset 507 d0a99da9ad77
child 542 5557cb62baab
permissions -rw-r--r--
macro.Userlist: User account Listing
     1 # -*- coding: iso-8859-1 -*-
     2 """
     3     MoinMoin - User account Listing
     4 
     5     (mostly copied from admin.do_user_browser)
     6     @copyright: 2001-2004 Juergen Hermann <jh@web.de>,
     7                 2003-2007 MoinMoin:ThomasWaldmann,
     8                 2007-2010 MoinMoin:ReimarBauer,
     9     @license: GNU GPL, see COPYING for details.
    10 """
    11 
    12 from MoinMoin import user, wikiutil
    13 from MoinMoin.util.dataset import TupleDataset, Column
    14 from MoinMoin.widget.browser import DataBrowserWidget
    15 from MoinMoin.Page import Page
    16 
    17 
    18 def macro_UserList(macro):
    19     """ macro to list users. """
    20     request = macro.request
    21     _ = request.getText
    22 
    23     data = TupleDataset()
    24     data.columns = []
    25     data.columns.extend([
    26         Column('name', label=_('Username')),
    27         Column('email', label=_('Email')),
    28         Column('groups', label=_('Member of Groups')),
    29         Column('language', label=_('Language'), autofilter=1),
    30     ])
    31     isgroup = request.cfg.cache.page_group_regexact.search
    32     groupnames = request.rootpage.getPageList(user='', filter=isgroup)
    33 
    34     # Iterate over users
    35     for uid in user.getUserList(request):
    36         account = user.User(request, uid)
    37         # don't offer groupnames to users which aren't allowed to read them
    38         grouppage_links = ', '.join([Page(request, groupname).link_to(request)
    39                                      for groupname in groupnames
    40                                      if account.name in request.groups.get(groupname) and request.user.may.read(groupname)])
    41 
    42         userhomepage = Page(request, account.name)
    43         if userhomepage.exists():
    44             namelink = userhomepage.link_to(request)
    45         else:
    46             namelink = wikiutil.escape(account.name)
    47 
    48         if account.disabled:
    49             enable_disable_link = request.page.link_to(
    50                                     request, text=_('Enable user'),
    51                                     querystr={"action": "userprofile",
    52                                               "name": account.name,
    53                                               "key": "disabled",
    54                                               "val": "0",
    55                                              },
    56                                     rel='nofollow')
    57             namelink += " (%s)" % _("disabled")
    58         else:
    59             enable_disable_link = request.page.link_to(
    60                                     request, text=_('Disable user'),
    61                                     querystr={"action": "userprofile",
    62                                               "name": account.name,
    63                                               "key": "disabled",
    64                                               "val": "1",
    65                                              },
    66                                     rel='nofollow')
    67 
    68         if account.email:
    69             email_link = (request.formatter.url(1, 'mailto:' + account.email, css='mailto') +
    70                           request.formatter.text(account.email) +
    71                           request.formatter.url(0))
    72         else:
    73             email_link = ''
    74 
    75         # language defined in settings or default language
    76         language = account.language or request.cfg.language_default
    77 
    78         data.addRow((
    79             (request.formatter.rawHTML(namelink)),
    80             email_link,
    81             request.formatter.rawHTML(grouppage_links),
    82             (language, language)
    83         ))
    84 
    85     if data:
    86         browser = DataBrowserWidget(request)
    87         browser.setData(data, sort_columns=[0])
    88         return browser.render(method="GET")
    89 
    90     # No data
    91     return ''
    92