Attachment 'fix-attachfile-filename.diff'
Download 1 --- orig/MoinMoin/action/AttachFile.py
2 +++ mod/MoinMoin/action/AttachFile.py
3 @@ -400,31 +400,23 @@
4 # check file & mimetype
5 fileitem = request.form['file'][0]
6
7 - #does not work with new method in request.py:
8 - #if not fileitem.file:
9 - # error_msg(pagename, request,
10 - # _("Filename of attachment not specified!"))
11 - # return
12 -
13 # get directory, and possibly create it
14 attach_dir = getAttachDir(pagename, create=1)
15
16 # make filename
17 - #filename = fileitem.filename
18 - rename = ''
19 + filename = None
20 + if request.form.has_key('file__filename__'):
21 + filename = request.form['file__filename__']
22 + rename = None
23 if request.form.has_key('rename'):
24 rename = request.form['rename'][0].strip()
25
26 - #target = filename
27 - #target = target.replace(':', '/')
28 - #target = target.replace('\\', '/')
29 - #target = target.split('/')[-1]
30 -
31 - # if we use twisted, "rename" field is NOT optional, but currently
32 - # the only way to specify a filename, because we can't access the
33 - # client filename
34 + # if we use twisted, "rename" field is NOT optional, because we
35 + # can't access the client filename
36 if rename:
37 - filename = target = rename.strip()
38 + filename = target = rename
39 + elif filename:
40 + target = filename
41 else:
42 error_msg(pagename, request,
43 _("Filename of attachment not specified!"))
44
45
46 --- orig/MoinMoin/request.py
47 +++ mod/MoinMoin/request.py
48 @@ -202,6 +202,30 @@
49 def setup_args(self):
50 return {}
51
52 + def _setup_args_from_cgi_form(self, form=None):
53 + import types, cgi
54 +
55 + if form is None:
56 + form = cgi.FieldStorage()
57 +
58 + args = {}
59 + for key in form.keys():
60 + values = form[key]
61 + if not isinstance(values, types.ListType):
62 + values = [values]
63 + fixedResult = []
64 + for i in values:
65 + if isinstance(i, cgi.MiniFieldStorage):
66 + fixedResult.append(i.value)
67 + elif isinstance(i, cgi.FieldStorage):
68 + fixedResult.append(i.value)
69 + # multiple uploads to same form field are stupid!
70 + if i.filename:
71 + args[key+'__filename__']=i.filename
72 +
73 + args[key] = fixedResult
74 + return args
75 +
76 def recodePageName(self, pagename):
77 # check for non-URI characters and then handle them according to
78 # http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.2.1
79 @@ -392,7 +416,7 @@
80
81 return self.finish()
82
83 -
84 +
85 def http_redirect(self, url):
86 """ Redirect to a fully qualified, or server-rooted URL """
87 if url.find("://") == -1:
88 @@ -455,22 +479,7 @@
89 self.opened_logs = 1
90
91 def setup_args(self):
92 - import types, cgi
93 - form = cgi.FieldStorage()
94 -
95 - args = {}
96 - for key in form.keys():
97 - values = form[key]
98 - if not isinstance(values, types.ListType):
99 - values = [values]
100 - fixedResult = []
101 - for i in values:
102 - if isinstance(i, cgi.MiniFieldStorage):
103 - i = i.value
104 - fixedResult.append(i)
105 -
106 - args[key] = fixedResult
107 - return args
108 + return self._setup_args_from_cgi_form()
109
110 def read(self):
111 """ Read from input stream.
112 @@ -629,8 +638,8 @@
113 if not self.opened_logs:
114 sys.stderr = open(os.path.join(config.data_dir, 'error.log'), 'at')
115 self.opened_logs = 1
116 -
117 -
118 +
119 +
120 #############################################################################
121 ### Accessors
122 #############################################################################
123 @@ -833,22 +842,7 @@
124 self.opened_logs = 1
125
126 def setup_args(self):
127 - import types, cgi
128 - form = cgi.FieldStorage()
129 -
130 - args = {}
131 - for key in form.keys():
132 - values = form[key]
133 - if not isinstance(values, types.ListType):
134 - values = [values]
135 - fixedResult = []
136 - for i in values:
137 - if isinstance(i, cgi.MiniFieldStorage):
138 - i = i.value
139 - fixedResult.append(i)
140 -
141 - args[key] = fixedResult
142 - return args
143 + return self._setup_args_from_cgi_form()
144
145 def read(self):
146 """ Read from input stream.
147 @@ -970,12 +964,12 @@
148 values = [values]
149 fixedResult = []
150 for i in values:
151 - if isinstance(i, util.Field):
152 - i = i.value
153 - fixedResult.append(i)
154 - elif isinstance(i, util.StringField):
155 - i = i.value
156 - fixedResult.append(i)
157 + if isinstance(i, util.Field):
158 + fixedResult.append(i.value)
159 + if i.filename:
160 + args[key+'__filename__']=i.filename
161 + elif isinstance(i, util.StringField):
162 + fixedResult.append(i.value)
163
164 args[key] = fixedResult
165 return args
166 @@ -1087,20 +1081,7 @@
167 RequestBase.__init__(self, properties)
168
169 def setup_args(self):
170 - import types, cgi
171 - args = {}
172 - for key in self.fcgform.keys():
173 - values = self.fcgform[key]
174 - if not isinstance(values, types.ListType):
175 - values = [values]
176 - fixedResult = []
177 - for i in values:
178 - if isinstance(i, cgi.MiniFieldStorage):
179 - i = i.value
180 - fixedResult.append(i)
181 -
182 - args[key] = fixedResult
183 - return args
184 + return self._setup_args_from_cgi_form(self.fcgform)
185
186 def read(self):
187 """ Read from input stream.
188 @@ -1120,8 +1101,8 @@
189
190 def open_logs(self):
191 return
192 -
193 -
194 +
195 +
196 #############################################################################
197 ### Accessors
198 #############################################################################
Attached Files
To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.You are not allowed to attach a file to this page.