bug fixes: make file handling work correctly

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1385 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2006-10-04 11:15:20 +00:00
parent 2467793b66
commit 4358ef9f51
4 changed files with 38 additions and 17 deletions

View file

@ -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)

View file

@ -1,5 +1,5 @@
<metal:block define-macro="edit">
<form method="post">
<form method="post" action="." enctype="multipart/form-data">
<input type="hidden" name="form.action" value="edit"
tal:attributes="value view/form_action" />
<table cellpadding="3" class="form">
@ -32,7 +32,7 @@
<metal:block define-macro="create">
<form method="post">
<form method="post" action="." enctype="multipart/form-data">
<input type="hidden" name="form.action" value="create"
tal:attributes="value view/form_action" />
<table cellpadding="3" class="form">
@ -108,9 +108,10 @@
<tr tal:repeat="relation view/assignments">
<td colspan="5">
<input type="hidden" name="form.assignments.old:list"
tal:attributes="value relation/uidToken" checked />
<input type="checkbox" name="form.assignments.selected:list"
tal:attributes="value relation/uidToken" checked />
tal:attributes="value relation/uidToken"
tal:condition="relation/other" />
<input type="checkbox" checked name="form.assignments.selected:list"
tal:attributes="value relation/uidToken;" />
<span tal:content="relation/title">Something</span>
(<span tal:content="relation/typeTitle">Topic</span>)
</td>

View file

@ -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()

View file

@ -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', '')