From 4358ef9f51bd5dce5bb28ee79b3e0581c144a58e Mon Sep 17 00:00:00 2001 From: helmutm Date: Wed, 4 Oct 2006 11:15:20 +0000 Subject: [PATCH] bug fixes: make file handling work correctly git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1385 fd906abe-77d9-0310-91a1-e0d9ade77398 --- browser/form.py | 15 ++++++++++++--- browser/form_macros.pt | 11 ++++++----- browser/node.py | 20 ++++++++++++-------- resource.py | 9 ++++++++- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/browser/form.py b/browser/form.py index d82e22b..87ab75b 100644 --- a/browser/form.py +++ b/browser/form.py @@ -32,12 +32,14 @@ from zope.app.container.contained import NameChooser from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy from zope.formlib.form import Form, EditForm, FormFields +from zope.publisher.browser import FileUpload from zope.publisher.interfaces import BadRequest from cybertools.ajax import innerHtml from cybertools.browser.form import FormController from cybertools.typology.interfaces import IType -from loops.interfaces import IResourceManager, INote, IDocument +from loops.concept import ResourceRelation +from loops.interfaces import IConcept, IResourceManager, INote, IDocument from loops.browser.node import NodeView from loops.browser.concept import ConceptRelationView from loops.resource import Resource @@ -128,8 +130,13 @@ class CreateObjectForm(ObjectForm, Form): self.typeInterface = ifc return FormFields(ifc) - @property + #@property def assignments(self): + target = self.virtualTargetObject + if (IConcept.providedBy(target) and + target.conceptType != self.loopsRoot.getConceptManager().getTypeConcept()): + rv = ConceptRelationView(ResourceRelation(target, None), self.request) + return (rv,) return () @@ -167,12 +174,14 @@ class EditObject(FormController): for k in form.keys(): if k.startswith(self.prefix): fn = k[len(self.prefix):] - if fn in ('action', 'type',) or fn.endswith('-empty-marker'): + if fn in ('action', 'type', 'data.used') or fn.endswith('-empty-marker'): continue value = form[k] if fn.startswith(self.conceptPrefix) and value: self.collectConcepts(fn[len(self.conceptPrefix):], value) else: + if isinstance(value, FileUpload): + value = value.read() setattr(adapted, fn, value) if self.old or self.selected: self.assignConcepts(obj) diff --git a/browser/form_macros.pt b/browser/form_macros.pt index d586635..81b7b38 100644 --- a/browser/form_macros.pt +++ b/browser/form_macros.pt @@ -1,5 +1,5 @@ -
+ @@ -32,7 +32,7 @@ - +
@@ -108,9 +108,10 @@ diff --git a/browser/node.py b/browser/node.py index ecd1ad6..3da4acb 100644 --- a/browser/node.py +++ b/browser/node.py @@ -46,7 +46,7 @@ from zope.event import notify from cybertools.ajax import innerHtml from cybertools.browser import configurator from cybertools.browser.view import GenericView -from cybertools.typology.interfaces import ITypeManager +from cybertools.typology.interfaces import IType, ITypeManager from loops.interfaces import IConcept, IResource, IDocument, IMediaAsset, INode from loops.interfaces import IViewConfiguratorSchema from loops.resource import MediaAsset @@ -74,8 +74,8 @@ class NodeView(BaseView): cm.register('portlet_left', 'navigation', title='Navigation', subMacro=self.template.macros['menu']) if not IUnauthenticatedPrincipal.providedBy(self.request.principal): - cm.register('portlet_right', 'clipboard', title='Clipboard', - subMacro=self.template.macros['clipboard']) + #cm.register('portlet_right', 'clipboard', title='Clipboard', + # subMacro=self.template.macros['clipboard']) # this belongs to loops.organize; how to register portlets # from sub- (other) packages? # see controller / configurator: use multiple configurators; @@ -246,13 +246,17 @@ class NodeView(BaseView): def targetDefaultView(self): target = self.virtualTargetObject - #target = self.request.annotations.get('loops.view', {}).get('target') - #if target is None: - # target = self.targetObject if target is not None: + ti = IType(target).typeInterface name = zapi.getDefaultViewName(target, self.request) - targetView = zapi.getMultiAdapter((target, self.request), - name=name) + targetView = None + if ti is not None: + adapted = ti(target) + targetView = component.queryMultiAdapter((adapted, self.request), + name=name) + if targetView is None: + targetView = component.getMultiAdapter((target, self.request), + name=name) if name == 'index.html' and hasattr(targetView, 'show'): return targetView.show() return targetView() diff --git a/resource.py b/resource.py index 4618ab8..c67e3a3 100644 --- a/resource.py +++ b/resource.py @@ -200,13 +200,20 @@ class FileAdapter(ResourceAdapterBase): implements(IFile) _schemas = list(IFile) + list(IBaseResource) + # let the adapter handle the data attribute: + _attributes = ResourceAdapterBase._attributes + ('data',) + + def setData(self, data): self.context.data = data + def getData(self): return self.context.data + data = property(getData, setData) + class DocumentAdapter(ResourceAdapterBase): """ Common base class for all resource types with a text-like data attribute. """ - # let the adapter handle the data attribute:S + # let the adapter handle the data attribute: _attributes = ResourceAdapterBase._attributes + ('data',) def setData(self, data): self.context._data = data.replace('\r', '')
- + tal:attributes="value relation/uidToken" + tal:condition="relation/other" /> + Something (Topic)