INodeConfigSchema + adapter OK
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1031 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
f3c02a6ac7
commit
e18410e0ac
5 changed files with 84 additions and 7 deletions
16
README.txt
16
README.txt
|
@ -275,6 +275,22 @@ target may be moved or renamed without any problems.)
|
|||
>>> ztapi.provideAdapter(INode, INodeConfigSchema, NodeConfigAdapter)
|
||||
>>> nodeConfig = INodeConfigSchema(m111)
|
||||
|
||||
>>> nodeConfig.targetUri
|
||||
u'.loops/concepts/cc2'
|
||||
>>> nodeConfig.title = u'New title for m111'
|
||||
>>> nodeConfig.title
|
||||
u'New title for m111'
|
||||
>>> m111.title
|
||||
u'New title for m111'
|
||||
>>> nodeConfig.targetUri = '.loops/resources/doc1'
|
||||
>>> nodeConfig.title = 'New title for m111'
|
||||
>>> m111.target is doc1
|
||||
True
|
||||
>>> nodeConfig.targetType
|
||||
'loops.resource.Document'
|
||||
>>> m111 in doc1.getClients()
|
||||
True
|
||||
|
||||
It is also possible to edit a target's attributes directly in an
|
||||
edit form provided by the node:
|
||||
|
||||
|
|
|
@ -272,8 +272,8 @@
|
|||
label="Add Node"
|
||||
name="AddLoopsNode.html"
|
||||
content_factory="loops.view.Node"
|
||||
schema="loops.interfaces.INode"
|
||||
fields="title description nodeType body"
|
||||
schema="loops.interfaces.INodeConfigSchema"
|
||||
fields="title description nodeType targetType targetUri createTarget"
|
||||
permission="zope.ManageContent">
|
||||
|
||||
<widget field="description" height="2" />
|
||||
|
@ -304,6 +304,21 @@
|
|||
|
||||
</editform>
|
||||
|
||||
<editform
|
||||
label="Configure Node"
|
||||
name="configure.html"
|
||||
schema="loops.interfaces.INodeConfigSchema"
|
||||
fields="title description nodeType targetType targetUri createTarget"
|
||||
for="loops.interfaces.INode"
|
||||
template="edit.pt"
|
||||
permission="zope.ManageContent"
|
||||
menu="zmi_views" title="Configure">
|
||||
|
||||
<widget field="description" height="2" />
|
||||
<widget field="body" height="15" />
|
||||
|
||||
</editform>
|
||||
|
||||
<page
|
||||
name="node.html"
|
||||
for="loops.interfaces.INode"
|
||||
|
|
|
@ -215,7 +215,8 @@
|
|||
<adapter factory="loops.external.NodesExporter" />
|
||||
<adapter factory="loops.external.NodesImporter" />
|
||||
|
||||
<adapter factory="loops.view.NodeConfigAdapter" />
|
||||
<adapter factory=".view.NodeConfigAdapter"
|
||||
permission="zope.ManageContent" />
|
||||
|
||||
<adapter factory="loops.target.DocumentProxy" />
|
||||
<adapter factory="loops.target.MediaAssetProxy" />
|
||||
|
|
|
@ -290,8 +290,8 @@ class ITargetProperties(Interface):
|
|||
targetType = schema.Choice(
|
||||
title=_(u'Target Type'),
|
||||
description=_(u'Type of the target'),
|
||||
values=('', 'resource.Document', 'resource.MediaAsset'),
|
||||
default='',
|
||||
values=('loops.resource.Document', 'loops.resource.MediaAsset'),
|
||||
default=None,
|
||||
required=False)
|
||||
|
||||
targetUri = schema.TextLine(
|
||||
|
|
49
view.py
49
view.py
|
@ -28,8 +28,10 @@ from zope.app.container.contained import Contained
|
|||
from zope.app.container.ordered import OrderedContainer
|
||||
from zope.app.container.traversal import ContainerTraverser, ItemTraverser
|
||||
from zope.app.container.traversal import ContainerTraversable
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.component import adapts
|
||||
from zope.interface import implements
|
||||
from zope.security.proxy import removeSecurityProxy
|
||||
from persistent import Persistent
|
||||
from cybertools.relation import DyadicRelation
|
||||
from cybertools.relation.registry import IRelationsRegistry, getRelations
|
||||
|
@ -155,7 +157,6 @@ class NodeTraverser(ItemTraverser):
|
|||
adapts(INode)
|
||||
|
||||
def publishTraverse(self, request, name):
|
||||
print name
|
||||
if name == '.loops':
|
||||
return self.context.getLoopsRoot()
|
||||
return super(NodeTraverser, self).publishTraverse(request, name)
|
||||
|
@ -164,8 +165,52 @@ class NodeTraverser(ItemTraverser):
|
|||
class NodeConfigAdapter(object):
|
||||
|
||||
def __init__(self, context):
|
||||
self.context = context
|
||||
self.context = removeSecurityProxy(context)
|
||||
#self.context = context
|
||||
|
||||
implements(INodeConfigSchema)
|
||||
adapts(INode)
|
||||
|
||||
# provide access to fields of the Node class:
|
||||
|
||||
def getTitle(self): return self.context.title
|
||||
def setTitle(self, title): self.context.title = title
|
||||
title = property(getTitle, setTitle)
|
||||
|
||||
def getDescription(self): return self.context.description
|
||||
def setDescription(self, description): self.context.description = description
|
||||
description = property(getDescription, setDescription)
|
||||
|
||||
def getNodeType(self): return self.context.nodeType
|
||||
def setNodeType(self, nodeType): self.context.nodeType = nodeType
|
||||
nodeType = property(getNodeType, setNodeType)
|
||||
|
||||
# the real config stuff:
|
||||
|
||||
@Lazy
|
||||
def loopsRoot(self): return self.context.getLoopsRoot()
|
||||
|
||||
def getTargetUri(self):
|
||||
rootPath = zapi.getPath(self.loopsRoot)
|
||||
if self.context.target is not None:
|
||||
path = zapi.getPath(self.context.target)[len(rootPath):]
|
||||
return '.loops' + path
|
||||
else:
|
||||
return ''
|
||||
|
||||
def setTargetUri(self, uri):
|
||||
names = uri.split('/')
|
||||
if names[0] == '.loops':
|
||||
path = '/'.join(names[1:])
|
||||
self.context.target = zapi.traverse(self.loopsRoot, path)
|
||||
|
||||
targetUri = property(getTargetUri, setTargetUri)
|
||||
|
||||
def getTargetType(self):
|
||||
target = self.context.target
|
||||
return '%s.%s' % (target.__module__, target.__class__.__name__)
|
||||
def setTargetType(self, tt):
|
||||
pass
|
||||
targetType = property(getTargetType, setTargetType)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue