diff --git a/README.txt b/README.txt
index d279e54..045d1d3 100755
--- a/README.txt
+++ b/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:
diff --git a/browser/configure.zcml b/browser/configure.zcml
index 7b49850..db1171b 100644
--- a/browser/configure.zcml
+++ b/browser/configure.zcml
@@ -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">
@@ -304,6 +304,21 @@
+
+
+
+
+
+
+
-
+
diff --git a/interfaces.py b/interfaces.py
index 1823cea..5b4e84d 100644
--- a/interfaces.py
+++ b/interfaces.py
@@ -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(
diff --git a/view.py b/view.py
index 23966c9..ca63d9e 100644
--- a/view.py
+++ b/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)
+
+