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.
  • [get | view] (2007-12-28 13:18:11, 5.5 KB) [[attachment:SubscribeUser_DL_moin-1.5.x.py]]
  • [get | view] (2007-12-28 13:18:34, 5.7 KB) [[attachment:SubscribeUser_DL_moin-1.6.x.py]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.