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:
parent
2467793b66
commit
4358ef9f51
4 changed files with 38 additions and 17 deletions
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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', '')
|
||||
|
|
Loading…
Add table
Reference in a new issue