diff options
| author | Christophe Matthieu <chm@openerp.com> | 2012-11-05 14:08:32 +0100 |
|---|---|---|
| committer | Christophe Matthieu <chm@openerp.com> | 2012-11-05 14:08:32 +0100 |
| commit | c045cdd5028ea5e883a97c2b583282e4db11b1bc (patch) | |
| tree | 68266f64936dd6a9635469721fe6802894c44a9d /addons/web/controllers | |
| parent | e79b8e29120f319b1e3b0655088971059f203d02 (diff) | |
| parent | 6f57449dcd48714ff9df5ff37dfbc0882610020e (diff) | |
[MERGE] merge from trunk
bzr revid: chm@openerp.com-20121105130832-klztvfcz8s88oe0j
Diffstat (limited to 'addons/web/controllers')
| -rw-r--r-- | addons/web/controllers/main.py | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 72ffd9567f6..ad8d91ed1dd 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -575,6 +575,20 @@ def from_elementtree(el, preserve_whitespaces=False): res["children"] = kids return res + +def content_disposition(filename, req): + filename = filename.encode('utf8') + escaped = urllib2.quote(filename) + browser = req.httprequest.user_agent.browser + version = int((req.httprequest.user_agent.version or '0').split('.')[0]) + if browser == 'msie' and version < 9: + return "attachment; filename=%s" % escaped + elif browser == 'safari': + return "attachment; filename=%s" % filename + else: + return "attachment; filename*=UTF-8''%s" % escaped + + #---------------------------------------------------------- # OpenERP Web web Controllers #---------------------------------------------------------- @@ -841,7 +855,7 @@ class Database(openerpweb.Controller): } return req.make_response(db_dump, [('Content-Type', 'application/octet-stream; charset=binary'), - ('Content-Disposition', 'attachment; filename="' + filename + '"')], + ('Content-Disposition', content_disposition(filename, req))], {'fileToken': int(token)} ) except xmlrpclib.Fault, e: @@ -1520,17 +1534,6 @@ class Binary(openerpweb.Controller): def placeholder(self, req): addons_path = openerpweb.addons_manifest['web']['addons_path'] return open(os.path.join(addons_path, 'web', 'static', 'src', 'img', 'placeholder.png'), 'rb').read() - def content_disposition(self, filename, req): - filename = filename.encode('utf8') - escaped = urllib2.quote(filename) - browser = req.httprequest.user_agent.browser - version = int((req.httprequest.user_agent.version or '0').split('.')[0]) - if browser == 'msie' and version < 9: - return "attachment; filename=%s" % escaped - elif browser == 'safari': - return "attachment; filename=%s" % filename - else: - return "attachment; filename*=UTF-8''%s" % escaped @openerpweb.httprequest def saveas(self, req, model, field, id=None, filename_field=None, **kw): @@ -1566,7 +1569,7 @@ class Binary(openerpweb.Controller): filename = res.get(filename_field, '') or filename return req.make_response(filecontent, [('Content-Type', 'application/octet-stream'), - ('Content-Disposition', self.content_disposition(filename, req))]) + ('Content-Disposition', content_disposition(filename, req))]) @openerpweb.httprequest def saveas_ajax(self, req, data, token): @@ -1596,7 +1599,7 @@ class Binary(openerpweb.Controller): filename = res.get(filename_field, '') or filename return req.make_response(filecontent, headers=[('Content-Type', 'application/octet-stream'), - ('Content-Disposition', self.content_disposition(filename, req))], + ('Content-Disposition', content_disposition(filename, req))], cookies={'fileToken': int(token)}) @openerpweb.httprequest @@ -1861,7 +1864,8 @@ class Export(View): return req.make_response(self.from_data(columns_headers, import_data), - headers=[('Content-Disposition', 'attachment; filename="%s"' % self.filename(model)), + headers=[('Content-Disposition', + content_disposition(self.filename(model), req)), ('Content-Type', self.content_type)], cookies={'fileToken': int(token)}) @@ -1997,11 +2001,11 @@ class Reports(View): file_name = reports.read(res_id[0], ['name'], context)['name'] else: file_name = action['report_name'] + file_name = '%s.%s' % (file_name, report_struct['format']) return req.make_response(report, headers=[ - # maybe we should take of what characters can appear in a file name? - ('Content-Disposition', 'attachment; filename="%s.%s"' % (file_name, report_struct['format'])), + ('Content-Disposition', content_disposition(file_name, req)), ('Content-Type', report_mimetype), ('Content-Length', len(report))], cookies={'fileToken': int(token)}) |
