[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - added ++add++ namespace for add views
Yvo Schubbe
y.2008 at wcm-solutions.de
Wed Sep 24 06:41:46 EDT 2008
Log message for revision 91416:
- added ++add++ namespace for add views
- adjusted add view actions
Changed:
U Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
U Products.CMFCore/trunk/Products/CMFCore/TypesTool.py
U Products.CMFCore/trunk/Products/CMFCore/content.zcml
A Products.CMFCore/trunk/Products/CMFCore/namespace.py
U Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py
-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2008-09-24 10:14:13 UTC (rev 91415)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2008-09-24 10:41:45 UTC (rev 91416)
@@ -4,6 +4,8 @@
2.2.0 (unreleased)
------------------
+- traversal: Added ++add++ namespace for add views.
+
- Skinstool import: Fix imports that manipulate existing skins.
(https://bugs.launchpad.net/zope-cmf/+bug/161732)
Modified: Products.CMFCore/trunk/Products/CMFCore/TypesTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/TypesTool.py 2008-09-24 10:14:13 UTC (rev 91415)
+++ Products.CMFCore/trunk/Products/CMFCore/TypesTool.py 2008-09-24 10:41:45 UTC (rev 91416)
@@ -48,6 +48,7 @@
from interfaces import ITypeInformation
from interfaces import ITypesTool
from permissions import AccessContentsInformation
+from permissions import AddPortalContent
from permissions import ManagePortal
from permissions import View
from utils import _checkPermission
@@ -340,7 +341,7 @@
if self.add_view_expr:
lazy_map['url'] = self.add_view_expr_object
else:
- lazy_map['url'] = Expression('string:${folder_url}/+%s'
+ lazy_map['url'] = Expression('string:${folder_url}/++add++%s'
% quote(self.getId()))
if self.content_icon:
lazy_map['icon'] = Expression('string:${portal_url}/%s'
@@ -370,7 +371,10 @@
def _checkAllowed(self, ec):
""" Check if the action is allowed in the current context.
"""
- return self.isConstructionAllowed(ec.contexts['folder'])
+ container = ec.contexts['folder']
+ if not _checkPermission(AddPortalContent, container):
+ return False
+ return self.isConstructionAllowed(container)
InitializeClass(TypeInformation)
Modified: Products.CMFCore/trunk/Products/CMFCore/content.zcml
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/content.zcml 2008-09-24 10:14:13 UTC (rev 91415)
+++ Products.CMFCore/trunk/Products/CMFCore/content.zcml 2008-09-24 10:41:45 UTC (rev 91416)
@@ -2,6 +2,11 @@
xmlns="http://namespaces.zope.org/zope"
xmlns:five="http://namespaces.zope.org/five">
+ <adapter
+ name="add"
+ factory=".namespace.AddViewTraverser"
+ />
+
<five:registerClass
class=".PortalFolder.PortalFolder"
meta_type="Portal Folder"
Added: Products.CMFCore/trunk/Products/CMFCore/namespace.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/namespace.py (rev 0)
+++ Products.CMFCore/trunk/Products/CMFCore/namespace.py 2008-09-24 10:41:45 UTC (rev 91416)
@@ -0,0 +1,53 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation and Contributors. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Namespace for CMF specific add views.
+
+$Id$
+"""
+
+from zope.component import adapts
+from zope.component import queryMultiAdapter
+from zope.interface import implements
+from zope.interface import Interface
+from zope.traversing.interfaces import ITraversable
+from zope.traversing.interfaces import TraversalError
+
+from interfaces import IFolderish
+from utils import getToolByName
+
+
+class AddViewTraverser(object):
+
+ """Add view traverser.
+ """
+
+ adapts(IFolderish, Interface)
+ implements(ITraversable)
+
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ def traverse(self, name, ignored):
+ ttool = getToolByName(self.context, 'portal_types')
+ ti = ttool.getTypeInfo(name)
+ if ti is not None:
+ add_view = queryMultiAdapter((self.context, self.request, ti),
+ name=ti.factory)
+ if add_view is None:
+ add_view = queryMultiAdapter((self.context, self.request, ti))
+ if add_view is not None:
+ add_view.__name__ = ti.factory
+ return add_view.__of__(self.context)
+
+ raise TraversalError(self.context, name)
Property changes on: Products.CMFCore/trunk/Products/CMFCore/namespace.py
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py 2008-09-24 10:14:13 UTC (rev 91415)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py 2008-09-24 10:41:45 UTC (rev 91416)
@@ -321,7 +321,7 @@
self.assertEqual(info_data[0]['title'], ti_data['title'])
self.assertEqual(info_data[0]['description'], ti_data['description'])
self.assertEqual(info_data[0]['url'].text,
- 'string:${folder_url}/+foo')
+ 'string:${folder_url}/++add++foo')
self.assertEqual(info_data[0]['icon'], '')
self.assertEqual(info_data[0]['visible'], True)
self.assertEqual(info_data[0]['available'], ti._checkAvailable)
More information about the Checkins
mailing list