2
2
MoinMoin - Subscribeuser - Action
3
Subscribe a user to a page
3
Subscribe (or unsubscribe) a user to a page.
5
5
@copyright: 2003 Daniela Nicklas <nicklas@informatik.uni-stuttgart.de>,
6
2005 MoinMoin:AlexanderSchremmer
6
2005 MoinMoin:AlexanderSchremmer,
7
2009 MoinMoin:ThomasWaldmann
7
8
@license: GNU GPL, see COPYING for details.
11
#sys.path.append("YOUR CONFIG DIRECTORY HERE")
13
13
from MoinMoin.Page import Page
14
14
from MoinMoin import user
15
15
from MoinMoin import wikiutil
17
18
def show_form(pagename, request):
18
19
_ = request.getText
19
request.emit_http_headers()
20
20
request.theme.send_title(_("Subscribe users to the page %s") % pagename, pagename=pagename)
23
<form action="%s/%s" method="POST" enctype="multipart/form-data">
23
<form action="%s" method="POST" enctype="multipart/form-data">
24
24
<input type="hidden" name="action" value="SubscribeUser">
25
25
%s <input type="text" name="users" size="50">
26
26
<input type="submit" value="Subscribe">
28
""" % (request.getScriptname(), wikiutil.quoteWikinameURL(pagename),
28
""" % (request.href(pagename),
29
29
_("Enter user names (comma separated):")))
30
30
request.theme.send_footer(pagename)
31
31
request.theme.send_closing_html()
34
def parse_re(usernames):
36
for name in usernames:
37
if name.startswith("re:"):
40
name = re.escape(name)
41
username_regexes.append(name)
42
return username_regexes
45
def parse_userlist(usernames):
48
for name in usernames:
49
if name.startswith("-"):
50
unsubscribe.append(name[1:])
51
elif name.startswith("+"):
52
subscribe.append(name[1:])
54
subscribe.append(name)
55
return parse_re(subscribe), parse_re(unsubscribe)
33
58
def show_result(pagename, request):
34
59
_ = request.getText
35
request.emit_http_headers()
37
61
request.theme.send_title(_("Subscribed for %s:") % pagename, pagename=pagename)
39
63
from MoinMoin.formatter.text_html import Formatter
40
64
formatter = Formatter(request)
42
result = subscribe_users(request, request.form['users'][0].split(","), pagename, formatter)
66
usernames = request.form['users'].split(",")
67
subscribe, unsubscribe = parse_userlist(usernames)
69
result = subscribe_users(request, subscribe, unsubscribe, pagename, formatter)
43
70
request.write(result)
45
72
request.theme.send_footer(pagename)
46
73
request.theme.send_closing_html()
48
def subscribe_users(request, usernamelist, pagename, formatter):
76
def subscribe_users(request, subscribe, unsubscribe, pagename, formatter):
49
77
_ = request.getText
51
79
if not Page(request, pagename).exists():
52
80
return u"Page does not exist."
56
realusers = [] # usernames that are really wiki users
58
85
# get user object - only with IDs!
59
86
for userid in user.getUserList(request):
61
87
userobj = user.User(request, userid)
63
if userobj.name in usernamelist: # found a user
64
realusers.append(userobj.name)
65
if userobj.isSubscribedTo([pagename]):
67
elif not userobj.email and not userobj.jid:
69
elif userobj.subscribe(pagename):
72
result.append(formatter.smiley('{OK}'))
73
result.append(formatter.text(" "))
75
result.append(formatter.smiley('{X}'))
76
result.append(formatter.text(" "))
77
result.append(formatter.url(1, Page(request, userobj.name).url(request)))
78
result.append(formatter.text(userobj.name))
79
result.append(formatter.url(0))
80
result.append(formatter.linebreak(preformatted=0))
82
result.extend([''.join([formatter.smiley('{X}'), formatter.text(" " + _("Not a user:") + " " + username), formatter.linebreak(preformatted=0)]) for username in usernamelist if username not in realusers])
90
matched = subscribed = False
92
for name_re in unsubscribe:
93
if re.match(name_re, name, re.U):
94
matched = did_match[name_re] = True
95
if (not userobj.isSubscribedTo([pagename]) or
96
userobj.unsubscribe(pagename)):
100
for name_re in subscribe:
101
if re.match(name_re, name, re.U):
102
matched = did_match[name_re] = True
103
if (userobj.isSubscribedTo([pagename]) or
104
(userobj.email or userobj.jid) and userobj.subscribe(pagename)):
109
result.extend([formatter.smiley(subscribed and '{*}' or '{o}'),
111
formatter.url(1, Page(request, name).url(request)),
112
formatter.text(name),
114
formatter.linebreak(preformatted=0),
117
result.extend([''.join([formatter.smiley('{X}'),
118
formatter.text(" " + _("Not a user:") + " " + name_re),
119
formatter.linebreak(preformatted=0)])
120
for name_re in subscribe + unsubscribe if name_re not in did_match])
84
122
return ''.join(result)
86
125
def execute(pagename, request):
87
126
_ = request.getText
88
127
if not request.user.may.admin(pagename):