Attachment 'SubscribeUser_DL_moin-1.6.x.py'
Download 1 """
2 MoinMoin - Subscribeuser - Action
3 Subscribe a user to a page
4
5 @copyright: 2003 Daniela Nicklas <nicklas@informatik.uni-stuttgart.de>
6 2005 MoinMoin:AlexanderSchremmer
7 2007 MoinMoin:DavidLinke (unsubscribe option)
8
9 @license: GNU GPL, see COPYING for details.
10 """
11
12 import sys, os
13 #sys.path.append("YOUR CONFIG DIRECTORY HERE")
14
15 from MoinMoin.Page import Page
16 from MoinMoin import user
17
18 def show_form(pagename, request):
19 _ = request.getText
20 request.emit_http_headers()
21 request.theme.send_title(_("Subscribe users to the page %s",
22 formatted=False) % pagename,
23 pagename=pagename)
24
25 request.write("""
26 <form action="" method="POST" enctype="multipart/form-data">
27 <input type="hidden" name="action" value="SubscribeUser">
28 %s <input type="text" name="users" size="50">
29 <input type="submit" value="Submit">
30 </form>
31 """ % _('Enter user names (comma separated, prepend "-" to user name to unsubscribe a user):', formatted=False))
32 # show subscribers
33 subscribers = Page(request, pagename).getSubscribers(request, include_self=1, return_users=1)
34 if subscribers:
35 request.write('<p>', _('Currently the following users are subscribed to this page:'))
36 for lang in subscribers.keys():
37 request.write('<br>[%s] ' % lang)
38 l = []
39 for userobj in subscribers[lang]:
40 # do NOT disclose email addr, only WikiName
41 userhomepage = Page(request, userobj.name)
42 if userhomepage.exists():
43 request.write(userhomepage.link_to(request) + ' ')
44 else:
45 request.write(userobj.name + ' ')
46 request.write('</p>')
47
48 request.theme.send_footer(pagename)
49 request.theme.send_closing_html()
50
51 def show_result(pagename, request):
52 _ = request.getText
53 request.emit_http_headers()
54
55 request.theme.send_title(_("Subscription changed for %s:", formatted=False) % pagename, pagename=pagename)
56
57 from MoinMoin.formatter.text_html import Formatter
58 formatter = Formatter(request)
59
60 result = subscribe_users(request, request.form['users'][0].split(","), pagename, formatter)
61 request.write(result)
62
63 request.theme.send_footer(pagename)
64 request.theme.send_closing_html()
65
66
67 def subscribe_users(request, usernamelist, pagename, formatter):
68 _ = request.getText
69
70 if not Page(request, pagename).exists():
71 return u"Page does not exist."
72
73 result = []
74 realusers = [] # usernames that are really wiki users
75 tosubscribe, tounsubscribe = [], []
76
77 for username in usernamelist:
78 if username.startswith('-'):
79 tounsubscribe.append(username[1:])
80 else:
81 tosubscribe.append(username)
82 usernamelist = tosubscribe + tounsubscribe
83
84 # get user object - only with IDs!
85 for userid in user.getUserList(request):
86 success = False
87 userobj = user.User(request, userid)
88
89 if userobj.name not in usernamelist: continue # not a user
90
91 realusers.append(userobj.name)
92 if userobj.name in tounsubscribe and userobj.isSubscribedTo([pagename]):
93 if userobj.unsubscribe(pagename):
94 success = True
95 else:
96 success = False
97 elif not userobj.email:
98 success = False
99 elif userobj.name in tosubscribe:
100 if userobj.subscribe(pagename):
101 success = True
102 else:
103 success = False
104 if success:
105 result.append(formatter.smiley('(./)'))
106 result.append(formatter.text(" "))
107 else:
108 result.append(formatter.smiley('{X}'))
109 result.append(formatter.text(" "))
110 userhomepage = Page(request, userobj.name)
111 if userhomepage.exists():
112 result.append(formatter.url(1, Page(request, userobj.name).url(request)))
113 result.append(formatter.text(userobj.name))
114 result.append(formatter.url(0))
115 result.append(formatter.linebreak(preformatted=0))
116
117 result.extend([''.join([formatter.smiley('<!>'), formatter.text(" " + _("Not a user:", formatted=False) + " " + username), formatter.linebreak(preformatted=0)]) for username in usernamelist if username not in realusers])
118
119 return ''.join(result)
120
121 def execute(pagename, request):
122 _ = request.getText
123 if not request.user.may.admin(pagename):
124 thispage = Page(request, pagename)
125 return thispage.send_page(msg=_("You are not allowed to perform this action.", formatted=False))
126 elif 'users' not in request.form:
127 show_form(pagename, request)
128 else:
129 show_result(pagename, request)
130
131 if __name__ == '__main__':
132 args = sys.argv
133 if not len(args) > 1:
134 print >>sys.stderr, """Subscribe users
135
136 %(myname)s pagename username[,username[,username[,...]]] [URL]
137
138 Subscribes the users to a page.
139 URL is just needed for a farmconfig scenario.
140
141 Example:
142 %(myname)s FrontPage TestUser,MatthewSimpson
143
144 """ % {"myname": os.path.basename(args[0])}
145 raise SystemExit
146
147 pagename = args[1]
148 usernames = args[2]
149
150 if len(args) > 3:
151 request_url = args[3]
152 else:
153 request_url = "localhost/"
154
155 # Setup MoinMoin environment
156 from MoinMoin.request import request_cli
157 request = request_cli.Request(url=request_url)
158 request.form = request.args = request.setup_args()
159
160 from MoinMoin.formatter.text_plain import Formatter
161 formatter = Formatter(request)
162
163 print subscribe_users(request, usernames.split(","), pagename, formatter)
Attached Files
To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.You are not allowed to attach a file to this page.