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