tw-public@0: """ tw-public@0: MoinMoin - newpage action tw-public@0: tw-public@0: Create a new page with optional template. Can be used with NewPage.py macro. tw-public@0: tw-public@0: @copyright: 2004 Vito Miliano (vito_moinnewpagewithtemplate@perilith.com) tw-public@0: @copyright: 2004 by Nir Soffer tw-public@0: @copyright: 2004 Alexander Schremmer tw-public@0: @license: GNU GPL, see COPYING for details. tw-public@0: """ tw-public@0: tw-public@0: from MoinMoin.util import MoinMoinNoFooter tw-public@0: from MoinMoin.Page import Page tw-public@0: import time tw-public@0: tw-public@0: class NewPage: tw-public@0: """ Open editor for a new page, using template """ tw-public@0: tw-public@0: def __init__(self, request, referrer): tw-public@0: self.request = request tw-public@0: self.referrer = referrer # The page the user came from tw-public@0: self.pagename = self.request.form.get('pagename', [None])[0] tw-public@0: self.nametemplate = self.request.form.get('nametemplate', ['%s'])[0] tw-public@0: self.nametemplate = self.nametemplate.replace('\x00','') tw-public@0: tw-public@0: def checkAndCombineArguments(self): tw-public@0: """ Check arguments in form, return error msg tw-public@0: tw-public@0: @rtype: unicode tw-public@0: @return: error message tw-public@0: """ tw-public@0: _ = self.request.getText tw-public@0: need_replace = self.nametemplate.find('%s') != -1 tw-public@0: if not self.pagename and need_replace: tw-public@0: return _("Cannot create a new page without a page name." tw-public@0: " Please specify a page name.") tw-public@0: if need_replace: tw-public@0: # generate a string that can be safely used as the pagename tw-public@0: # template variable tw-public@0: repl = 'A@' tw-public@0: i = 0 tw-public@0: while self.nametemplate.find(repl) != -1: tw-public@0: repl += ['#','&','$','x','X',':','@'][i] tw-public@0: i += 1 tw-public@0: i = i % 7 tw-public@0: template = self.nametemplate.replace('%s', repl) tw-public@0: else: tw-public@0: template = self.nametemplate tw-public@0: template = template.encode('utf-8') tw-public@0: template = time.strftime(template, self.request.user.getTime(time.time())) tw-public@0: template = template.decode('utf-8') tw-public@0: if need_replace: tw-public@0: self.pagename = template.replace(repl, self.pagename) tw-public@0: else: tw-public@0: self.pagename = template tw-public@0: return '' tw-public@0: tw-public@0: def checkPermissions(self): tw-public@0: """ Check write permission in form, return error msg tw-public@0: tw-public@0: @rtype: unicode tw-public@0: @return: error message tw-public@0: """ tw-public@0: _ = self.request.getText tw-public@0: page = Page(self.request, self.pagename) tw-public@0: if not (page.isWritable() and self.request.user.may.read(self.pagename)): tw-public@0: # Same error as the edit page for localization reasons tw-public@0: return _('You are not allowed to edit this page.') tw-public@0: return '' tw-public@0: tw-public@0: def render(self): tw-public@0: """ Redirect to the new page, using edit action and template """ tw-public@0: tw-public@0: error = self.checkAndCombineArguments() or self.checkPermissions() tw-public@0: if error: tw-public@0: # Send back to the page you came from, with an error msg tw-public@0: page = Page(self.request, self.referrer) tw-public@0: page.send_page(self.request, msg=error) tw-public@0: else: tw-public@0: # Redirect to new page using edit action. No error checking tw-public@0: # is needed because it is done later in new request. tw-public@0: pagename = self.pagename tw-public@0: query = {'action': 'edit', 'backto': self.referrer} tw-public@0: tw-public@0: template = self.request.form.get('template', [''])[0] tw-public@0: if template: tw-public@0: from MoinMoin.wikiutil import quoteWikinameURL tw-public@0: query['template'] = quoteWikinameURL(template) tw-public@0: tw-public@0: parent = self.request.form.get('parent', [''])[0] tw-public@0: if parent: tw-public@0: pagename = "%s/%s" % (parent, pagename) tw-public@0: tw-public@0: url = Page(self.request, pagename).url(self.request, query, 0) tw-public@0: self.request.http_redirect(url) tw-public@0: raise MoinMoinNoFooter tw-public@0: tw-public@0: return '' tw-public@0: tw-public@0: def execute(pagename, request): tw-public@0: """ Temporary glue code for current moin action system """ tw-public@0: return NewPage(request, pagename).render() tw-public@0: