From a0838de6f183675834b6ee2789b31902002197f4 Mon Sep 17 00:00:00 2001 From: helmutm Date: Thu, 14 Jun 2007 19:41:39 +0000 Subject: [PATCH] additional attribute 'localFilename' for IFile git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1788 fd906abe-77d9-0310-91a1-e0d9ade77398 --- browser/form.py | 1 + browser/resource.py | 9 ++++++++- interfaces.py | 1 + resource.py | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/browser/form.py b/browser/form.py index 7418dce..570858b 100644 --- a/browser/form.py +++ b/browser/form.py @@ -294,6 +294,7 @@ class EditObject(FormController): ct = contentType[0] self.request.form['form.contentType'] = ct adapted.contentType = ct + adapted.localFilename = filename setattr(adapted, fn, value) if self.old or self.selected: self.assignConcepts(obj) diff --git a/browser/resource.py b/browser/resource.py index ed0acd7..2050bd5 100644 --- a/browser/resource.py +++ b/browser/resource.py @@ -22,10 +22,12 @@ View class for resource objects. $Id$ """ +import urllib from zope.cachedescriptors.property import Lazy from zope import component from zope.app import zapi from zope.app.catalog.interfaces import ICatalog +from zope.app.container.interfaces import INameChooser from zope.dublincore.interfaces import ICMFDublinCore from zope.app.form.browser.textwidgets import FileWidget from zope.app.pagetemplate import ViewPageTemplateFile @@ -36,12 +38,14 @@ from zope.proxy import removeAllProxies from zope.schema.interfaces import IBytes from zope.security import canAccess, canWrite from zope.security.proxy import removeSecurityProxy +from zope.traversing.api import getName, getParent from cybertools.typology.interfaces import IType from loops.browser.common import EditForm, BaseView, Action from loops.browser.concept import ConceptRelationView, ConceptConfigureView from loops.browser.node import NodeView, node_macros from loops.browser.util import html_quote +from loops.common import adapted from loops.interfaces import IBaseResource, IDocument, IMediaAsset, ITextDocument from loops.interfaces import ITypeConcept from loops.versioning.browser import version_macros @@ -159,8 +163,11 @@ class ResourceView(BaseView): ct = context.contentType #if useAttachment or (not ct.startswith('image/') and ct != 'application/pdf'): if useAttachment: + filename = adapted(self.context).localFilename or getName(self.context) + #filename = urllib.quote(filename) + filename = INameChooser(getParent(self.context)).normalizeName(filename) response.setHeader('Content-Disposition', - 'attachment; filename=%s' % zapi.getName(self.context)) + 'attachment; filename=%s' % filename) return data def download(self): diff --git a/interfaces.py b/interfaces.py index db5afc9..8c7fda9 100644 --- a/interfaces.py +++ b/interfaces.py @@ -614,6 +614,7 @@ class IFile(IResourceAdapter, IResourceSchema): default='', missing_value='', required=False) + localFilename = Attribute('Filename provided during upload.') class IExternalFile(IFile): diff --git a/resource.py b/resource.py index cc028ef..b8c282a 100644 --- a/resource.py +++ b/resource.py @@ -27,7 +27,7 @@ from zope.app import zapi from zope.app.container.btree import BTreeContainer from zope.app.container.contained import Contained from zope.app.file.image import Image -from zope.app.file.interfaces import IFile +#from zope.app.file.interfaces import IFile from zope.filerepresentation.interfaces import IReadFile, IWriteFile from zope.cachedescriptors.property import Lazy from zope.component import adapts