1.1 --- a/actions/ApproveChanges.py Sun Oct 09 20:37:21 2011 +0200
1.2 +++ b/actions/ApproveChanges.py Sun Oct 09 21:17:09 2011 +0200
1.3 @@ -15,6 +15,8 @@
1.4
1.5 from MoinMoin.action import ActionBase
1.6 from MoinMoin.PageEditor import PageEditor
1.7 +from MoinMoin.wikiutil import escape
1.8 +from ApproveChangesSupport import *
1.9
1.10 # Action class and supporting functions.
1.11
1.12 @@ -32,9 +34,35 @@
1.13 _ = self._
1.14 request = self.request
1.15 fmt = request.formatter
1.16 - prompt = _("Approve the displayed page version?")
1.17 - return fmt.paragraph(1) + fmt.text(prompt) + fmt.paragraph(0) + \
1.18 - fmt.paragraph(1) + fmt.rawHTML(buttons_html) + fmt.paragraph(0)
1.19 +
1.20 + d = {
1.21 + "buttons_html" : buttons_html,
1.22 + "prompt" : escape(_("Approve the displayed page version?")),
1.23 + "purge_label" : escape(_("Purge all other queued versions"))
1.24 + }
1.25 +
1.26 + # Prepare the output HTML.
1.27 +
1.28 + html = '''
1.29 +<table>
1.30 + <tr>
1.31 + <td colspan="2">%(prompt)s</td>
1.32 + </tr>
1.33 + <tr>
1.34 + <td class="label"><label>%(purge_label)s</label></td>
1.35 + <td>
1.36 + <input name="purge" type="checkbox" value="yes" />
1.37 + </td>
1.38 + </tr>
1.39 + <tr>
1.40 + <td></td>
1.41 + <td class="buttons">
1.42 + %(buttons_html)s
1.43 + </td>
1.44 + </tr>
1.45 +</table>''' % d
1.46 +
1.47 + return html
1.48
1.49 def do_action(self):
1.50
1.51 @@ -45,6 +73,7 @@
1.52
1.53 # Make sure that only suitably privileged users can perform this action.
1.54
1.55 + queued_changes_area = get_queued_changes_area(request)
1.56 reviewers_group = getattr(request.cfg, "reviewers_group", "PageReviewersGroup")
1.57
1.58 if not request.user.valid or (
1.59 @@ -54,10 +83,12 @@
1.60 return 0, _("Only page reviewers can perform this action.")
1.61
1.62 # Edit the target page, using this page's content.
1.63 - # The current page should have a name of the form...
1.64 - # ".../TargetPage/ApprovalQueue/n"
1.65 + # The current page must be a queued page version.
1.66
1.67 - target_page_name = "/".join(self.pagename.split("/")[:-2])
1.68 + if not is_queued_page(self.pagename, queued_changes_area):
1.69 + return 0, _("This page is not queued for approval.")
1.70 +
1.71 + target_page_name = get_target_page_name(self.pagename)
1.72 target_page = PageEditor(request, target_page_name)
1.73
1.74 # Save the target page.
1.75 @@ -72,6 +103,15 @@
1.76 current_page = PageEditor(request, self.pagename)
1.77 current_page.deletePage(_("Changes to page approved."))
1.78
1.79 + # Delete the rest of the queue if requested.
1.80 +
1.81 + form = get_form(request)
1.82 +
1.83 + if form.get("purge"):
1.84 + for name in get_queue_pages(request, target_page_name, queued_changes_area):
1.85 + queue_page = PageEditor(request, name)
1.86 + queue_page.deletePage(_("Changes to page rejected."))
1.87 +
1.88 # Redirect to the target page.
1.89
1.90 request.http_redirect(target_page.url(request))