[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