"""
newpageonly action

Create a new page with optional template. Can be used with NewPageOnly.py macro.

diff from newpage.py:
    + page MUST be new
    + page name w/ spaces will parsed into camel case
    - transfer back to referrer

@copyright: 2005 Henry Ho (henryho167@hotmail.com)
@copyright: 2004 Vito Miliano (vito_moinnewpagewithtemplate@perilith.com)
@copyright: 2004 by Nir Soffer <nirs@freeshell.org>
@copyright: 2004 Alexander Schremmer <alex AT alexanderweb DOT de>
@license: GNU GPL, see COPYING for details.
"""

from MoinMoin.action.newpage import NewPage
from MoinMoin.util import MoinMoinNoFooter
from MoinMoin.Page import Page
import time

class NewPageOnly(NewPage):
    def __init__(self, request, referrer):
        NewPage.__init__(self, request, referrer)
        
        # automatically translate spaced pagename into CamelCase
        if self.pagename:
            self.pagename = ''.join([s.title() for s in self.pagename.split()])
        
        
    def checkPageExistence(self):
        _ = self.request.getText
        if Page(self.request, self.pagename).exists():
            return _("Page name has already been used."
                     "  Please specify another page name.")
        
    def render(self):
        """ Redirect to the new page, using edit action and template """
        
        error = self.checkAndCombineArguments() or self.checkPageExistence() or self.checkPermissions()
        if error:
            # Send back to the page you came from, with an error msg
            page = Page(self.request, self.referrer)
            page.send_page(self.request, msg=error)
        else:
            # Redirect to new page using edit action. No error checking
            # is needed because it is done later in new request.
            pagename = self.pagename
            # REMOVED to prevent going back: , 'backto': self.referrer}
            query = {'action': 'edit'} 

            template = self.request.form.get('template', [''])[0]
            if template:
                from MoinMoin.wikiutil import quoteWikinameURL
                query['template'] = quoteWikinameURL(template)

            parent = self.request.form.get('parent', [''])[0]
            if parent:
                pagename = "%s/%s" % (parent, pagename)
            
            url = Page(self.request, pagename).url(self.request, query, 0)
            self.request.http_redirect(url)
            raise MoinMoinNoFooter

        return ''
        
def execute(pagename, request):
    """ Temporary glue code for current moin action system """
    return NewPageOnly(request, pagename).render()


