1
# -*- coding: iso-8859-1 -*-
3
MoinMoin - Action to load page content from a file upload
5
@copyright: 2007-2008 MoinMoin:ReimarBauer,
6
2008 MoinMoin:ThomasWaldmann
7
@license: GNU GPL, see COPYING for details.
12
from MoinMoin import wikiutil, config
13
from MoinMoin.action import ActionBase, AttachFile
14
from MoinMoin.PageEditor import PageEditor
15
from MoinMoin.Page import Page
17
class Load(ActionBase):
20
Note: the action name is the class name
22
def __init__(self, pagename, request):
23
ActionBase.__init__(self, pagename, request)
24
self.use_ticket = True
26
self.form_trigger = 'Load'
27
self.form_trigger_label = _('Load')
28
self.pagename = pagename
30
self.enctype = 'multipart/form-data'
37
request = self.request
39
comment = form.get('comment', [u''])[0]
40
comment = wikiutil.clean_input(comment)
42
filename = form.get('file__filename__')
43
rename = form.get('rename', [''])[0].strip()
49
target = AttachFile.preprocess_filename(target)
50
target = wikiutil.clean_input(target)
53
filecontent = form['file'][0]
54
if hasattr(filecontent, 'read'): # a file-like object
55
filecontent = filecontent.read() # XXX reads complete file into memory!
56
filecontent = wikiutil.decodeUnknownInput(filecontent)
58
self.pagename = target
59
pg = PageEditor(request, self.pagename)
61
msg = pg.saveText(filecontent, 0, comment=comment)
63
except pg.EditConflict, e:
65
except pg.SaveError, msg:
68
msg = _("Pagename not specified!")
71
def do_action_finish(self, success):
73
url = Page(self.request, self.pagename).url(self.request)
74
self.request.http_redirect(url)
77
self.render_msg(self.make_form(), "dialog")
79
def get_form_html(self, buttons_html):
83
<p>%(explanation)s</p>
85
<dt>%(upload_label_file)s</dt>
86
<dd><input type="file" name="file" size="50" value=""></dd>
87
<dt>%(upload_label_rename)s</dt>
88
<dd><input type="text" name="rename" size="50" value="%(pagename)s"></dd>
89
<dt>%(upload_label_comment)s</dt>
90
<dd><input type="text" name="comment" size="80" maxlength="200"></dd>
93
<input type="hidden" name="action" value="%(action_name)s">
94
<input type="hidden" name="do" value="upload">
99
'headline': _("Upload page content"),
100
'explanation': _("You can upload content for the page named below. "
101
"If you change the page name, you can also upload content for another page. "
102
"If the page name is empty, we derive the page name from the file name."),
103
'upload_label_file': _('File to load page content from'),
104
'upload_label_comment': _('Comment'),
105
'upload_label_rename': _('Page Name'),
106
'pagename': self.pagename,
107
'buttons_html': buttons_html,
108
'action_name': self.form_trigger,
111
def execute(pagename, request):
112
""" Glue code for actions """
113
Load(pagename, request).render()