1 # -*- coding: iso-8859-1 -*- 2 """ 3 MoinMoin - Queue changes for review 4 5 Queue changed pages edited by unprivileged users for review by the 6 ApproveChanges action. 7 8 @copyright: 2011 Paul Boddie <paul@boddie.org.uk> 9 @license: GNU GPL, see COPYING for details. 10 """ 11 12 from MoinMoin.PageEditor import PageEditor 13 from MoinMoin.events import PagePreSaveEvent, Abort 14 from ApproveChangesSupport import * 15 16 def handle_presave(event): 17 request = event.request 18 _ = request.getText 19 20 approved_editors_group = get_approved_editors_group(request) 21 queued_changes_area = get_queued_changes_area(request) 22 23 pagename = event.page_editor.page_name 24 25 # Saving into queues has to be permitted or the mechanism will keep trying 26 # to save into a queue of the specified page. 27 28 if is_queued_page(pagename, queued_changes_area): 29 return None 30 31 # For normal pages, the user has to be approved. Otherwise, the page will be 32 # saved into a queue. 33 34 elif not request.user.valid or ( 35 not request.dicts.has_member(approved_editors_group, request.user.name) and \ 36 not request.user.isSuperUser()): 37 38 # Get a queue number by listing the subpages of the queue area and 39 # finding the highest queue number, then adding one to it. 40 41 queue_number = -1 42 43 for name in get_queue_pages(request, pagename, queued_changes_area): 44 number = name.split("/")[-1] 45 if number.isdigit(): 46 queue_number = max(queue_number, int(number)) 47 48 queue_number += 1 49 50 # Save the page in the queue. 51 52 new_page = PageEditor(request, "%s/%s/%s" % (pagename, queued_changes_area, queue_number)) 53 54 try: 55 new_page.saveText(event.new_text, 0) 56 except PageEditor.Unchanged: 57 pass 58 59 # Abort the page save operation. 60 61 return Abort(_("Your changes have been queued for approval.")) 62 63 def handle(event): 64 if isinstance(event, PagePreSaveEvent): 65 return handle_presave(event) 66 67 # vim: tabstop=4 expandtab shiftwidth=4