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.
  • [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.