1.1 --- a/ApproveChangesSupport.py Sun Oct 16 17:57:55 2011 +0200
1.2 +++ b/ApproveChangesSupport.py Sun Oct 16 19:18:44 2011 +0200
1.3 @@ -12,17 +12,21 @@
1.4 default "PageReviewersGroup").
1.5
1.6 @copyright: 2011 by Paul Boddie <paul@boddie.org.uk>
1.7 + 2003-2007 MoinMoin:ThomasWaldmann,
1.8 + 2003 by Gustavo Niemeyer
1.9 @license: GNU GPL (v2 or later), see COPYING.txt for details.
1.10 """
1.11
1.12 from MoinMoin import user
1.13 from MoinMoin.Page import Page
1.14 +from MoinMoin.PageEditor import PageEditor
1.15 from MoinMoin.wikiutil import escape
1.16 import re
1.17
1.18 __version__ = "0.1"
1.19
1.20 space_pattern = re.compile("(\s+)")
1.21 +group_member_pattern = re.compile(ur'^ \* +(?:\[\[)?(?P<member>.+?)(?:\]\])? *$', re.MULTILINE | re.UNICODE)
1.22
1.23 def get_queued_changes_page(request):
1.24 return getattr(request.cfg, "queued_changes_page", "ApprovalQueue")
1.25 @@ -36,9 +40,6 @@
1.26 def get_queued_changes_user(request):
1.27 return getattr(request.cfg, "queued_changes_user", "ApprovalQueueUser")
1.28
1.29 -def get_secret_key(request):
1.30 - return request.cfg.secrets["wikiutil/tickets"]
1.31 -
1.32 def is_reviewer(request):
1.33 return request.user.valid and (
1.34 has_member(request, get_approved_editors_group(request), request.user.name) or \
1.35 @@ -46,9 +47,12 @@
1.36
1.37 def is_approved(request):
1.38 return request.user.valid and (
1.39 - has_member(request, get_approved_editors_group(request), request.user.name) or \
1.40 + user_is_approved(request, request.user.name) or \
1.41 request.user.isSuperUser())
1.42
1.43 +def user_is_approved(request, username):
1.44 + return has_member(request, get_approved_editors_group(request), username)
1.45 +
1.46 def is_queued_changes_user(request):
1.47 return request.user.valid and request.user.name == get_queued_changes_user(request)
1.48
1.49 @@ -168,6 +172,36 @@
1.50
1.51 return "\n".join(new_body), found
1.52
1.53 +def add_to_group_page(request, username, groupname):
1.54 +
1.55 + """
1.56 + Using the 'request', add 'username' to 'groupname', changing the group page.
1.57 + This is not the same as adding a member to the group, but it will have the
1.58 + same effect when the group is rescanned.
1.59 + """
1.60 +
1.61 + _ = request.getText
1.62 +
1.63 + page = PageEditor(request, groupname)
1.64 + body = page.get_raw_body()
1.65 + match = None
1.66 +
1.67 + # Find the last matching span.
1.68 +
1.69 + for match in group_member_pattern.finditer(body):
1.70 + start, end = match.span()
1.71 +
1.72 + # Add a group member to the body.
1.73 +
1.74 + entry = ("\n * %s" % username)
1.75 +
1.76 + if match:
1.77 + body = body[:end] + entry + body[end:]
1.78 + else:
1.79 + body += entry
1.80 +
1.81 + page.saveText(body, 0, comment=_("Added %s to the approved editors group.") % username)
1.82 +
1.83 # Utility classes and associated functions.
1.84 # NOTE: These are a subset of EventAggregatorSupport.
1.85