# HG changeset patch # User Paul Boddie # Date 1384093140 -3600 # Node ID 5e947e093388b7c23662a43c582e899d03b65d34 # Parent b1d7199b266879422e599828a2382e3927b7e7da Added user blocking and the removal of all queued edits for a user. Fixed "ApprovalQueue" usage, retrieving the configured approval queue page name. diff -r b1d7199b2668 -r 5e947e093388 actions/ApproveChanges.py --- a/actions/ApproveChanges.py Sun Nov 10 01:47:57 2013 +0100 +++ b/actions/ApproveChanges.py Sun Nov 10 15:19:00 2013 +0100 @@ -8,6 +8,7 @@ existing page when approving the changes. @copyright: 2011, 2013 Paul Boddie + @copyright: 2006 MoinMoin:ThomasWaldmann @license: GNU GPL (v2 or later), see COPYING.txt for details. """ @@ -16,6 +17,7 @@ from MoinMoin.action import ActionBase from MoinMoin.Page import Page from MoinMoin.PageEditor import PageEditor, conflict_markers +from MoinMoin.user import User from MoinMoin.util import diff3 from MoinSupport import getPagesForSearch from ApproveChangesSupport import * @@ -51,6 +53,9 @@ page = Page(request, self.page.page_name, rev=rev) return page.get_raw_body() + def get_queued_edits(self, request, username): + return getPagesForSearch("title:regex:%s/%s$" % (username, get_queued_changes_page(request)), request) + def get_form_html(self, buttons_html): _ = self._ request = self.request @@ -82,7 +87,7 @@ # Get other edit details, if requested. if form.get("show-edits") and username: - queued_edits = getPagesForSearch("title:regex:%s/ApprovalQueue$" % username, request) + queued_edits = self.get_queued_edits(request, username) else: queued_edits = [] @@ -94,9 +99,10 @@ "discard_edit_label" : escape(_("Discard the displayed page version")), "editaction_label" : escape(_("Edit action")), "nothing_label" : escape(_("Take no action for now")), + "remove_all_label" : escape(_("Remove all queued edits by this user")), "rev" : escattr(rev), "notice" : escape(_("The affected page has been edited since the queued changes were made.")), - "show_edits_label" : escattr(_("Show all queued edits by this user.")), + "show_edits_label" : escattr(_("Show all queued edits by this user")), "showing_edits_label" : escape(_("Queued edits by this user")), "useraction_label" : escape(_("User action")), } @@ -106,7 +112,7 @@ for value in "nothing", "approve", "block": d["useraction_%s" % value] = form.get("useraction", ["nothing"])[0] == value and "checked='checked'" or "" - for value in "approve", "discard": + for value in "approve", "discard", "remove_all": d["editaction_%s" % value] = form.get("editaction", ["approve"])[0] == value and "checked='checked'" or "" # Prepare the output HTML. @@ -124,11 +130,14 @@ html += ''' - + + + + ''' % d # User information and actions. @@ -225,17 +234,45 @@ # Get the user who submitted the changes. username = directives.get("unapproved-user") + useraction = form.get("useraction", [""])[0] + editaction = form.get("editaction", [""])[0] # Approve the user if requested, regardless of what happens below. - if username and form.get("useraction", [""])[0] == "approve": - add_to_group_page(request, username, get_approved_editors_group(request)) + if username: + if useraction == "approve": + add_to_group_page(request, username, get_approved_editors_group(request)) + + # Disable the user if requested. + + elif useraction == "block": + user = User(request, None, username) + + # From the MoinMoin.script.account.disable module. - # NOTE: Add user blocking. + if not user.disabled: + user.disabled = 1 + user.name = "%s-%s" % (user.name, user.id) + if user.email: + user.email = "%s-%s" % (user.email, user.id) + user.subscribed_pages = "" # avoid using email + user.save() + + # Remove all edits if requested. + + if editaction == "remove_all": + for queued_page in self.get_queued_edits(request, username): + queued_page = PageEditor(request, queued_page.page_name) + queued_page.deletePage(_("Changes to page discarded.")) + + # Redirect to the target page. + + request.http_redirect(target_page.url(request)) + return 1, None # Discard the edit if requested. - if form.get("editaction", [""])[0] == "discard": + if editaction == "discard": # NOTE: The page could be deleted completely or certain revisions # NOTE: purged.