1 # -*- coding: iso-8859-1 -*- 2 """ 3 MoinMoin - ApproveChanges 4 5 Permit the approval of an edited page queued by the page editor when an 6 unprivileged user attempted to save a page. Since queued pages are placed in 7 a subpage area, this action just moves the queued page content into the 8 existing page when approving the changes. 9 10 @copyright: 2011 Paul Boddie <paul@boddie.org.uk> 11 @license: GNU GPL (v2 or later), see COPYING.txt for details. 12 """ 13 14 Dependencies = ['pages'] 15 16 from MoinMoin.action import ActionBase 17 from MoinMoin.PageEditor import PageEditor 18 19 # Action class and supporting functions. 20 21 class ApproveChanges(ActionBase): 22 23 "An action which approves a queued page version." 24 25 def __init__(self, pagename, request): 26 ActionBase.__init__(self, pagename, request) 27 _ = self._ 28 self.form_trigger = "approve" 29 self.form_trigger_label = _("Approve changes") 30 31 def get_form_html(self, buttons_html): 32 _ = self._ 33 request = self.request 34 fmt = request.formatter 35 prompt = _("Approve the displayed page version?") 36 return fmt.paragraph(1) + fmt.text(prompt) + fmt.paragraph(0) + \ 37 fmt.paragraph(1) + fmt.rawHTML(buttons_html) + fmt.paragraph(0) 38 39 def do_action(self): 40 41 "Approve the page and move it into place." 42 43 _ = self._ 44 request = self.request 45 46 # Make sure that only suitably privileged users can perform this action. 47 48 reviewers_group = getattr(request.cfg, "reviewers_group", "PageReviewersGroup") 49 50 if not request.user.valid or ( 51 not request.dicts.has_member(reviewers_group, request.user.name) and \ 52 not request.user.isSuperUser()): 53 54 return 0, _("Only page reviewers can perform this action.") 55 56 # Edit the target page, using this page's content. 57 # The current page should have a name of the form... 58 # ".../TargetPage/ApprovalQueue/n" 59 60 target_page_name = "/".join(self.pagename.split("/")[:-2]) 61 target_page = PageEditor(request, target_page_name) 62 63 # Save the target page. 64 65 try: 66 target_page.saveText(self.page.get_raw_body(), 0) 67 except PageEditor.Unchanged: 68 pass 69 70 # Delete the current page. 71 72 current_page = PageEditor(request, self.pagename) 73 current_page.deletePage(_("Changes to page approved.")) 74 75 # Redirect to the target page. 76 77 request.http_redirect(target_page.url(request)) 78 return 1, None 79 80 def render_success(self, msg, msgtype): 81 82 """ 83 Render neither 'msg' nor 'msgtype' since redirection should occur 84 instead. 85 NOTE: msgtype is optional because MoinMoin 1.5.x does not support it. 86 """ 87 88 pass 89 90 # Action function. 91 92 def execute(pagename, request): 93 ApproveChanges(pagename, request).render() 94 95 # vim: tabstop=4 expandtab shiftwidth=4