1.1 --- a/actions/ApproveChanges.py Sat Oct 15 01:48:48 2011 +0200
1.2 +++ b/actions/ApproveChanges.py Sat Oct 15 17:39:22 2011 +0200
1.3 @@ -31,16 +31,47 @@
1.4 self.form_trigger = "approve"
1.5 self.form_trigger_label = _("Approve changes")
1.6
1.7 + def get_revision(self):
1.8 + request = self.request
1.9 + form = get_form(request)
1.10 +
1.11 + # Get the revision or None.
1.12 +
1.13 + rev = form.get("rev")
1.14 + if rev is None:
1.15 + return self.page.current_rev()
1.16 + else:
1.17 + return int(rev[0])
1.18 +
1.19 + def get_body(self, rev):
1.20 + request = self.request
1.21 + page = Page(request, self.page.page_name, rev=rev)
1.22 + return page.get_raw_body()
1.23 +
1.24 def get_form_html(self, buttons_html):
1.25 _ = self._
1.26 request = self.request
1.27 fmt = request.formatter
1.28 - form = get_form(request)
1.29 - rev = form.get("rev")
1.30 + rev = self.get_revision()
1.31 +
1.32 + # Get information about the queued changes.
1.33 +
1.34 + body = self.get_body(rev)
1.35 + _body, directives = remove_directives(body, ["acl", "parent-revision", "unapproved-user"])
1.36 +
1.37 + # Get the target page's parent revision for the queued changes.
1.38 +
1.39 + target_page_name = get_target_page_name(self.pagename)
1.40 + target_page = PageEditor(request, target_page_name)
1.41 +
1.42 + current_rev = target_page.current_rev()
1.43 + parent_rev = int(directives.get("parent-revision", current_rev))
1.44
1.45 d = {
1.46 "buttons_html" : buttons_html,
1.47 "prompt" : escape(_("Approve the displayed page version?")),
1.48 + "rev" : escattr(rev),
1.49 + "notice" : escape(_("The affected page has been edited since the queued changes were made.")),
1.50 }
1.51
1.52 # Prepare the output HTML.
1.53 @@ -49,7 +80,15 @@
1.54 <table>
1.55 <tr>
1.56 <td>%(prompt)s</td>
1.57 - </tr>
1.58 + </tr>''' % d
1.59 +
1.60 + if parent_rev != current_rev:
1.61 + html += '''
1.62 + <tr>
1.63 + <td><em>%(notice)s</em></td>
1.64 + </tr>''' % d
1.65 +
1.66 + html += '''
1.67 <tr>
1.68 <td class="buttons">
1.69 %(buttons_html)s
1.70 @@ -59,7 +98,7 @@
1.71
1.72 if rev:
1.73 html += '''
1.74 -<input name="rev" type="hidden" value="%(rev)s" />''' % {"rev" : escattr(rev[0])}
1.75 +<input name="rev" type="hidden" value="%(rev)s" />''' % d
1.76
1.77 return html
1.78
1.79 @@ -86,18 +125,8 @@
1.80 # First, the displayed revision of the queued changes page must be
1.81 # retrieved.
1.82
1.83 - form = get_form(request)
1.84 -
1.85 - # Get the revision or None.
1.86 -
1.87 - rev = form.get("rev")
1.88 - if rev is None:
1.89 - rev = self.page.current_rev()
1.90 - else:
1.91 - rev = int(rev[0])
1.92 -
1.93 - page = Page(request, self.page.page_name, rev=rev)
1.94 - body = page.get_raw_body()
1.95 + rev = self.get_revision()
1.96 + body = self.get_body(rev)
1.97
1.98 # Remove any introduced directives.
1.99
2.1 --- a/events/queue_for_review.py Sat Oct 15 01:48:48 2011 +0200
2.2 +++ b/events/queue_for_review.py Sat Oct 15 17:39:22 2011 +0200
2.3 @@ -36,9 +36,10 @@
2.4 return Abort(_("Queued changes may not be edited."))
2.5
2.6 # For normal pages, the user has to be approved. Otherwise, the page will be
2.7 - # saved into a queue.
2.8 + # saved into a queue. If the save operation occurs as part of an approval
2.9 + # action, however, the effective user will be able to save the page.
2.10
2.11 - elif not is_approved(request):
2.12 + elif not request.action == "ApproveChanges" and not is_approved(request):
2.13
2.14 # Save the page in the queue.
2.15