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