# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - Action for supplementation pages

    This Action is used to create a supplementation subpage e.g. a Discussion page below a comon page
        
    Note:
    derived from the newpage macro by Vito Miliano (vito_moinnewpagewithtemplate@perilith.com) et al

    @copyright: 2006-2007 ReimarBauer  
    @license: GNU GPL, see COPYING for details.  
"""
import StringIO
from MoinMoin.Page import Page
from MoinMoin import wikiutil
from MoinMoin.wikiutil import quoteWikinameURL
from MoinMoin.action import edit

def execute(pagename, request):
    _ = request.getText
    sub_page_name = request.cfg.supplementation_page_name
    sub_page_template = request.cfg.supplementation_page_template
    newpagename = "%s/%s" % (pagename, sub_page_name)

    if pagename.endswith(sub_page_name): # sub_sub_page redirects to sub_page
        query = {}
        url = Page(request, pagename).url(request, query, escape=0, relative=False)
        request.http_redirect(url)
    elif request.user.may.read(newpagename) and request.user.may.write(newpagename):
        query = {}
        url = Page(request, newpagename).url(request, query, escape=0, relative=False)
        page = Page(request, newpagename)
        if page.exists(): # page is defined -> redirect
            pagecontent = page.get_raw_body()
            from MoinMoin.parser.text_moin_wiki import Parser as WikiParser
            request.emit_http_headers()
            request.setContentLanguage(request.lang)
            request.theme.send_title(_("Discussion of %s") % pagename, pagename=newpagename)
            # Start content - IMPORTANT - without content div, there is no direction support!
            request.write(request.formatter.startContent("content"))
            parser = WikiParser(pagecontent, request)
            request.formatter.setPage(page)
            parser.format(request.formatter)
            request.theme.send_footer(newpagename)
            request.theme.send_closing_html()
        else:  # page will be created from template
            edit.execute(newpagename, request)

