# -*- coding: iso-8859-1 -*-
"""
    ShowRev - action to select a page revision
    @license: GNU GPL, see COPYING for details.
    @copyright:  2008 MoinMoin:ReimarBauer
"""
from MoinMoin import wikiutil
from MoinMoin.Page import Page

def form_html(ticket, revlist):
    html = []
    for rev in revlist:
        html.append("<OPTION>%d</OPTION>" % rev)
    return '''
<form method="post" >
<p>select a revision</P>
<select name="revision" size="%(len)s">
%(option)s
</select>
<input type="hidden" name="action" value="ShowRev">
<input type="submit" name="button" value="Select">
<input type="hidden" name="ticket" value="%(ticket)s">
</form>''' % {
    'ticket': ticket,
    'option': ''.join(html),
    'len': min(len(revlist), 5)}

def execute(pagename, request):
    _ = request.getText
    page = Page(request, pagename)
    if not request.user.may.read(pagename):
        msg = _('''You are not allowed to read this page.''')
        request.theme.add_msg(msg, "error")
        return page.send_page()

    if (request.form.has_key('button') and request.form.has_key('ticket')):
        if not wikiutil.checkTicket(request, request.form['ticket'][0]):
            msg = _('''Please use the interactive user interface!''')
            request.theme.add_msg(msg, "error")
            return page.send_page()
        rev = long((request.form.get('revision', ['-1'])[0]))
        return Page(request, pagename, rev=rev).send_page()
    ticket = wikiutil.createTicket(request)
    revlist = page.getRevList()
    msg = form_html(ticket, revlist)
    request.theme.add_msg(msg, "info")
    page.send_page()

