[z3-checkins] r7036 - in z3/CMFonFive: . trunk trunk/tests trunk/www
tseaver at codespeak.net
tseaver at codespeak.net
Tue Oct 19 19:06:25 MEST 2004
Author: tseaver
Date: Tue Oct 19 19:06:19 2004
New Revision: 7036
Added:
z3/CMFonFive/
z3/CMFonFive/trunk/
z3/CMFonFive/trunk/__init__.py
z3/CMFonFive/trunk/__init__.pyc (contents, props changed)
z3/CMFonFive/trunk/bridgecontent.zcml
z3/CMFonFive/trunk/bridgetools.zcml
z3/CMFonFive/trunk/browser.py
z3/CMFonFive/trunk/browser.pyc (contents, props changed)
z3/CMFonFive/trunk/configure.zcml
z3/CMFonFive/trunk/document.zcml
z3/CMFonFive/trunk/folders.zcml
z3/CMFonFive/trunk/impltools.zcml
z3/CMFonFive/trunk/interfaces.py
z3/CMFonFive/trunk/interfaces.pyc (contents, props changed)
z3/CMFonFive/trunk/tests/
z3/CMFonFive/trunk/tests/__init__.py
z3/CMFonFive/trunk/tests/test_interfaces.py
z3/CMFonFive/trunk/www/
z3/CMFonFive/trunk/www/document_edit.pt
z3/CMFonFive/trunk/www/document_view.pt
z3/CMFonFive/trunk/www/folder_contents.pt
Log:
- First pass at code which bridges CMF to Z3 using Five.
Added: z3/CMFonFive/trunk/__init__.py
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/__init__.py Tue Oct 19 19:06:19 2004
@@ -0,0 +1,8 @@
+""" Bridge CMF to Five.
+
+$Id$
+"""
+
+def initialize(context):
+
+ pass
Added: z3/CMFonFive/trunk/__init__.pyc
==============================================================================
Binary file. No diff available.
Added: z3/CMFonFive/trunk/bridgecontent.zcml
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/bridgecontent.zcml Tue Oct 19 19:06:19 2004
@@ -0,0 +1,51 @@
+<configure xmlns="http://namespaces.zope.org/five">
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.Contentish.Contentish"
+ package=".interfaces"
+ name="IContentish"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.Dynamic.DynamicType"
+ package=".interfaces"
+ name="IDynamicType"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.DublinCore.DublinCore"
+ package=".interfaces"
+ name="IDublinCore"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.DublinCore.CatalogableDublinCore"
+ package=".interfaces"
+ name="ICatalogableDublinCore"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.DublinCore.MutableDublinCore"
+ package=".interfaces"
+ name="IMutableDublinCore"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.Discussions.Discussable"
+ package=".interfaces"
+ name="IDiscussable"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.Discussions.DiscussionResponse"
+ package=".interfaces"
+ name="IDiscussionResponse"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.Syndicatable.Syndicatable"
+ package=".interfaces"
+ name="ISyndicatable"
+ />
+
+</configure>
Added: z3/CMFonFive/trunk/bridgetools.zcml
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/bridgetools.zcml Tue Oct 19 19:06:19 2004
@@ -0,0 +1,135 @@
+<configure xmlns="http://namespaces.zope.org/five">
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.CachingPolicyManager.CachingPolicyManager"
+ package=".interfaces"
+ name="ICachingPolicyManager"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.ContentTypeRegistry.ContentTypeRegistryPredicate"
+ package=".interfaces"
+ name="IContentTypeRegistryPredicate"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.ContentTypeRegistry.ContentTypeRegistry"
+ package=".interfaces"
+ name="IContentTypeRegistry"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_actions.portal_actions"
+ package=".interfaces"
+ name="IPortalActionsTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_actions.ActionProvider"
+ package=".interfaces"
+ name="IActionProvider"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_catalog.portal_catalog"
+ package=".interfaces"
+ name="IPortalCatalogTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_catalog.IndexableObjectWrapper"
+ package=".interfaces"
+ name="IIndexableObjectWrapper"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_discussion.portal_discussion"
+ package=".interfaces"
+ name="IPortalDiscussionTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_memberdata.portal_memberdata"
+ package=".interfaces"
+ name="IPortalMemberDataTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_memberdata.MemberData"
+ package=".interfaces"
+ name="IMemberData"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_membership.portal_membership"
+ package=".interfaces"
+ name="ICorePortalMembershipTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_metadata.portal_metadata"
+ package=".interfaces"
+ name="IPortalMetadataTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_properties.portal_properties"
+ package=".interfaces"
+ name="IPortalPropertiesTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_registration.portal_registration"
+ package=".interfaces"
+ name="IPortalRegistrationTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_skins.portal_skins"
+ package=".interfaces"
+ name="IPortalSkinsTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_types.portal_types"
+ package=".interfaces"
+ name="IPortalTypesTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_types.ContentTypeInformation"
+ package=".interfaces"
+ name="IContentTypeInformation"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_undo.portal_undo"
+ package=".interfaces"
+ name="IPortalUndoTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_url.portal_url"
+ package=".interfaces"
+ name="IPortalURLTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_workflow.portal_workflow"
+ package=".interfaces"
+ name="IPortalWorkflowTool"
+ />
+
+ <bridge
+ zope2="Products.CMFCore.interfaces.portal_workflow.WorkflowDefinition"
+ package=".interfaces"
+ name="IWorkflowDefinition"
+ />
+
+ <bridge
+ zope2="Products.CMFDefault.interfaces.portal_membership.portal_membership"
+ package=".interfaces"
+ name="IDefaultPortalMembershipTool"
+ />
+
+</configure>
Added: z3/CMFonFive/trunk/browser.py
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/browser.py Tue Oct 19 19:06:19 2004
@@ -0,0 +1,52 @@
+""" Browser view classes for CMF content.
+
+$Id$
+"""
+
+from Acquisition import Acquired
+from ZODB.POSException import ConflictError
+
+from Products.CMFCore.CMFCorePermissions import ListFolderContents
+from Products.CMFCore.CMFCorePermissions import ModifyPortalContent
+from Products.CMFCore.CMFCorePermissions import View
+from Products.CMFDefault.utils import scrubHTML
+from Products.Five import BrowserView
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+
+class PortalFolderView(BrowserView):
+
+ getPhysicalPath = Acquired
+
+ view = PageTemplateFile('www/folder_contents.pt', globals())
+
+class DocumentView(BrowserView):
+
+ getPhysicalPath = Acquired
+
+ view = PageTemplateFile('www/document_view.pt', globals())
+
+ edit_form = PageTemplateFile('www/document_edit.pt', globals())
+
+ def edit(self, text_format, text, file='',
+ SafetyBelt='', change_and_view=''):
+ """Edit a document.
+ """
+ absolute_url = self.context.absolute_url
+ type_info = self.context.getTypeInfo()
+ action_id = 'edit'
+ msg = 'Document+changed.'
+
+ try:
+ text = scrubHTML(text) # Strip Javascript, etc.
+ self.context.edit(text_format, text, file, safety_belt=SafetyBelt)
+ except ConflictError:
+ raise
+ except Exception, e:
+ msg = e
+ else:
+ if change_and_view:
+ action_id = view
+
+ target_action = type_info.getActionById(action_id)
+ self.request.RESPONSE.redirect('%s/%s?portal_status_message=%s'
+ % (absolute_url, target_action, qst))
Added: z3/CMFonFive/trunk/browser.pyc
==============================================================================
Binary file. No diff available.
Added: z3/CMFonFive/trunk/configure.zcml
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/configure.zcml Tue Oct 19 19:06:19 2004
@@ -0,0 +1,18 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+ xmlns:five="http://namespaces.zope.org/five"
+ xmlns:browser="http://namespaces.zope.org/browser">
+
+ <!-- Bridge CMF's Zope 2 interfaces -->
+ <include file="bridgetools.zcml" />
+ <include file="bridgecontent.zcml" />
+
+ <!-- Assert synthesized interfaces for CMF's tool classes. -->
+ <include file="impltools.zcml" />
+
+ <!-- Make Zope3 assertions about folder classes. -->
+ <include file="folders.zcml" />
+
+ <!-- Make Zope3 assertions about Document class. -->
+ <include file="document.zcml" />
+
+</configure>
Added: z3/CMFonFive/trunk/document.zcml
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/document.zcml Tue Oct 19 19:06:19 2004
@@ -0,0 +1,72 @@
+<configure xmlns="http://namespaces.zope.org/five"
+ xmlns:browser="http://namespaces.zope.org/browser">
+
+ <implements
+ class="Products.CMFDefault.Document.Document"
+ interface=".interfaces.IContentish"
+ />
+
+ <implements
+ class="Products.CMFDefault.Document.Document"
+ interface=".interfaces.IDynamicType"
+ />
+
+ <implements
+ class="Products.CMFDefault.Document.Document"
+ interface=".interfaces.IDublinCore"
+ />
+
+ <implements
+ class="Products.CMFDefault.Document.Document"
+ interface=".interfaces.ICatalogableDublinCore"
+ />
+
+ <implements
+ class="Products.CMFDefault.Document.Document"
+ interface=".interfaces.IMutableDublinCore"
+ />
+
+ <implements
+ class="Products.CMFDefault.Document.Document"
+ interface=".interfaces.IDiscussable"
+ />
+
+ <implements
+ class="Products.CMFDefault.Document.Document"
+ interface=".interfaces.IDocument"
+ />
+
+ <implements
+ class="Products.CMFDefault.Document.Document"
+ interface=".interfaces.IMutableDocument"
+ />
+
+ <traversable
+ class="Products.CMFDefault.Document.Document"
+ />
+
+ <browser:page
+ for=".interfaces.IDocument"
+ name="index.html"
+ class=".browser.DocumentView"
+ attribute="view"
+ permission="zope2.View"
+ />
+
+ <browser:page
+ for=".interfaces.IDocument"
+ name="edit_form.html"
+ class=".browser.DocumentView"
+ attribute="edit_form"
+ permission="cmf.ModifyPortalContent"
+ />
+
+ <browser:page
+ for=".interfaces.IDocument"
+ name="edit.html"
+ class=".browser.DocumentView"
+ attribute="edit"
+ permission="cmf.ModifyPortalContent"
+ />
+
+</configure>
Added: z3/CMFonFive/trunk/folders.zcml
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/folders.zcml Tue Oct 19 19:06:19 2004
@@ -0,0 +1,47 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+ xmlns:five="http://namespaces.zope.org/five"
+ xmlns:browser="http://namespaces.zope.org/browser">
+
+ <!-- CMFCore's PortalFolder -->
+
+ <five:implements
+ class="Products.CMFCore.PortalFolder.PortalFolder"
+ interface=".interfaces.IPortalFolder"
+ />
+
+ <five:implements
+ class="Products.CMFDefault.Portal.CMFSite"
+ interface=".interfaces.IPortalFolder"
+ />
+
+ <five:implements
+ class="Products.CMFDefault.SkinnedFolder.SkinnedFolder"
+ interface=".interfaces.IPortalFolder"
+ />
+
+ <five:implements
+ class="Products.CMFDefault.SkinnedFolder.SkinnedFolder"
+ interface=".interfaces.ISyndicatable"
+ />
+
+ <five:traversable
+ class="Products.CMFDefault.SkinnedFolder.SkinnedFolder"
+ />
+
+ <five:traversable
+ class="Products.CMFCore.PortalFolder.PortalFolder"
+ />
+
+ <five:traversable
+ class="Products.CMFDefault.Portal.CMFSite"
+ />
+
+ <browser:page
+ for=".interfaces.IPortalFolder"
+ class=".browser.PortalFolderView"
+ attribute="view"
+ name="index.html"
+ permission="zope2.View"
+ />
+
+</configure>
Added: z3/CMFonFive/trunk/impltools.zcml
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/impltools.zcml Tue Oct 19 19:06:19 2004
@@ -0,0 +1,260 @@
+<configure xmlns="http://namespaces.zope.org/five">
+
+ <!-- CMFCore's CachingPolicyManager -->
+
+ <implements
+ class="Products.CMFCore.CachingPolicyManager.CachingPolicyManager"
+ interface=".interfaces.ICachingPolicyManager"
+ />
+
+ <!-- CMFCore's ContentTypeRegistry -->
+
+ <implements
+ class="Products.CMFCore.ContentTypeRegistry.MajorMinorPredicate"
+ interface=".interfaces.IContentTypeRegistryPredicate"
+ />
+
+ <implements
+ class="Products.CMFCore.ContentTypeRegistry.ExtensionPredicate"
+ interface=".interfaces.IContentTypeRegistryPredicate"
+ />
+
+ <implements
+ class="Products.CMFCore.ContentTypeRegistry.MimeTypeRegexPredicate"
+ interface=".interfaces.IContentTypeRegistryPredicate"
+ />
+
+ <implements
+ class="Products.CMFCore.ContentTypeRegistry.NameRegexPredicate"
+ interface=".interfaces.IContentTypeRegistryPredicate"
+ />
+
+ <implements
+ class="Products.CMFCore.ContentTypeRegistry.ContentTypeRegistry"
+ interface=".interfaces.IContentTypeRegistry"
+ />
+
+ <!-- CMFCore's ActionsTool -->
+
+ <implements
+ class="Products.CMFCore.ActionsTool.ActionsTool"
+ interface=".interfaces.IPortalActionsTool"
+ />
+
+ <implements
+ class="Products.CMFCore.ActionsTool.ActionsTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFCore.CachingPolicyManager.CachingPolicyManager"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFCore.CatalogTool.CatalogTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFCore.MemberDataTool.MemberDataTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFCore.MembershipTool.MembershipTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFCore.RegistrationTool.RegistrationTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFCore.SkinsTool.SkinsTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFCore.TypesTool.TypesTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFCore.URLTool.URLTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFCore.UndoTool.UndoTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFDefault.DiscussionTool.DiscussionTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFDefault.MembershipTool.MembershipTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFDefault.MetadataTool.MetadataTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFDefault.PropertiesTool.PropertiesTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFDefault.RegistrationTool.RegistrationTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <implements
+ class="Products.CMFDefault.SyndicationTool.SyndicationTool"
+ interface=".interfaces.IActionProvider"
+ />
+
+ <!-- CMFCore's CatalogTool -->
+
+ <implements
+ class="Products.CMFCore.CatalogTool.CatalogTool"
+ interface=".interfaces.IPortalCatalogTool"
+ />
+
+ <implements
+ class="Products.CMFCore.CatalogTool.IndexableObjectWrapper"
+ interface=".interfaces.IIndexableObjectWrapper"
+ />
+
+ <!-- CMFCore's DiscussionTool -->
+
+ <implements
+ class="Products.CMFDefault.DiscussionTool.DiscussionTool"
+ interface=".interfaces.IPortalDiscussionTool"
+ />
+
+ <!-- CMFCore's MemberDataTool -->
+
+ <implements
+ class="Products.CMFCore.MemberDataTool.MemberDataTool"
+ interface=".interfaces.IPortalMemberDataTool"
+ />
+
+ <implements
+ class="Products.CMFCore.MemberDataTool.MemberData"
+ interface=".interfaces.IMemberData"
+ />
+
+ <!-- CMFCore's MembershipTool -->
+
+ <implements
+ class="Products.CMFCore.MembershipTool.MembershipTool"
+ interface=".interfaces.ICorePortalMembershipTool"
+ />
+
+ <!-- CMFCore's MetadataTool -->
+
+ <implements
+ class="Products.CMFDefault.MetadataTool.MetadataTool"
+ interface=".interfaces.IPortalMetadataTool"
+ />
+
+ <!-- CMFCore's PropertiesTool -->
+
+ <implements
+ class="Products.CMFDefault.PropertiesTool.PropertiesTool"
+ interface=".interfaces.IPortalPropertiesTool"
+ />
+
+ <!-- CMFCore's RegistrationTool -->
+
+ <implements
+ class="Products.CMFCore.RegistrationTool.RegistrationTool"
+ interface=".interfaces.IPortalRegistrationTool"
+ />
+
+ <implements
+ class="Products.CMFDefault.RegistrationTool.RegistrationTool"
+ interface=".interfaces.IPortalRegistrationTool"
+ />
+
+ <!-- CMFCore's SkinsTool -->
+
+ <implements
+ class="Products.CMFCore.SkinsTool.SkinsTool"
+ interface=".interfaces.IPortalSkinsTool"
+ />
+
+ <!-- CMFCore's TypesTool -->
+
+ <implements
+ class="Products.CMFCore.TypesTool.TypesTool"
+ interface=".interfaces.IPortalTypesTool"
+ />
+
+ <implements
+ class="Products.CMFCore.TypesTool.FactoryTypeInformation"
+ interface=".interfaces.IContentTypeInformation"
+ />
+
+ <implements
+ class="Products.CMFCore.TypesTool.ScriptableTypeInformation"
+ interface=".interfaces.IContentTypeInformation"
+ />
+
+ <!-- CMFCore's UndoTool -->
+
+ <implements
+ class="Products.CMFCore.UndoTool.UndoTool"
+ interface=".interfaces.IPortalUndoTool"
+ />
+
+ <!-- CMFCore's URLTool -->
+
+ <implements
+ class="Products.CMFCore.URLTool.URLTool"
+ interface=".interfaces.IPortalURLTool"
+ />
+
+ <!-- CMFCore's WorkflowTool -->
+
+ <implements
+ class="Products.CMFCore.WorkflowTool.WorkflowTool"
+ interface=".interfaces.IPortalWorkflowTool"
+ />
+
+ <implements
+ class="Products.CMFDefault.DefaultWorkflow.DefaultWorkflowDefinition"
+ interface=".interfaces.IWorkflowDefinition"
+ />
+
+ <implements
+ class="Products.DCWorkflow.DCWorkflow.DCWorkflowDefinition"
+ interface=".interfaces.IWorkflowDefinition"
+ />
+
+ <!-- CMFDefault's MembershipTool -->
+
+ <implements
+ class="Products.CMFDefault.MembershipTool.MembershipTool"
+ interface=".interfaces.IDefaultPortalMembershipTool"
+ />
+
+ <implements
+ class="Products.CMFDefault.DiscussionItem.DiscussionItem"
+ interface=".interfaces.IDiscussionResponse"
+ />
+
+ <implements
+ class="Products.CMFCore.PortalFolder.PortalFolder"
+ interface=".interfaces.ISyndicatable"
+ />
+
+</configure>
Added: z3/CMFonFive/trunk/interfaces.py
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/interfaces.py Tue Oct 19 19:06:19 2004
@@ -0,0 +1,77 @@
+""" Zope3 interface shims for CMF.
+
+$Id$
+"""
+
+from zope.interface import Interface
+
+#------------------------------------------------------------------------------
+# CMFCore.PortalFolder.PortalFolder
+#
+# N.B: there is no specific interfaces for the content type!
+#------------------------------------------------------------------------------
+class IPortalFolder(Interface):
+
+ """ CMF-aware folders.
+ """
+
+ def allowedContentTypes():
+
+ """ List names of content types addable to this folder.
+ """
+
+ def contentIds(spec=None, filter=None):
+
+ """ List IDs of content objects in this folder.
+ """
+
+ def contentValues(spec=None, filter=None):
+
+ """ List content objects in the folder.
+ """
+
+ def listFolderContents(spec=None, contentFilter=None):
+
+ """ List IDs of content objects in this folder.
+ """
+
+ def contentItems(spec=None, filter=None):
+
+ """ List (id, value) tuples for content objects in this folder.
+ """
+
+#------------------------------------------------------------------------------
+# CMFDefault.Document
+#
+# N.B: there is no specific interfaces for the content type!
+#------------------------------------------------------------------------------
+class IDocument(Interface):
+
+ """ Textual content, in one of several formats.
+
+ o Allowed formats include: structured text, HTML, plain text.
+ """
+
+ def CookedBody():
+
+ """ Return the "cooked" (ready for presentation) form of the text.
+ """
+
+ def EditableBody():
+
+ """ Return the "raw" (as edited) form of the text.
+ """
+
+class IMutableDocument(IDocument):
+
+ """ Updatable form of IDocument.
+ """
+
+ def edit(text_format, text, file='', safety_belt=''):
+
+ """ Update the document.
+
+ o 'safety_belt', if passed, must match the value issued when the
+ edit began.
+ """
+
Added: z3/CMFonFive/trunk/interfaces.pyc
==============================================================================
Binary file. No diff available.
Added: z3/CMFonFive/trunk/tests/__init__.py
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/tests/__init__.py Tue Oct 19 19:06:19 2004
@@ -0,0 +1,4 @@
+""" Unit tests for CMFonFive.
+
+$Id$
+"""
Added: z3/CMFonFive/trunk/tests/test_interfaces.py
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/tests/test_interfaces.py Tue Oct 19 19:06:19 2004
@@ -0,0 +1,238 @@
+""" Unit tests for mapped interfaces.
+
+$Id$
+"""
+
+import unittest
+
+from zope.interface.interface import Interface as Z3_Interface
+
+class MappedInterfaceTests(unittest.TestCase):
+
+ def test_ICachingPolicyManager(self):
+
+ from Products.CMFonFive.interfaces import ICachingPolicyManager
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(ICachingPolicyManager))
+
+ def test_IContentTypeRegistry(self):
+
+ from Products.CMFonFive.interfaces import IContentTypeRegistry
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IContentTypeRegistry))
+
+ def test_IContentTypeRegistryPredicate(self):
+
+ from Products.CMFonFive.interfaces import IContentTypeRegistryPredicate
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IContentTypeRegistryPredicate))
+
+ def test_IDublinCore(self):
+
+ from Products.CMFonFive.interfaces import IDublinCore
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IDublinCore))
+
+ def test_ICatalogableDublinCore(self):
+
+ from Products.CMFonFive.interfaces import ICatalogableDublinCore
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(ICatalogableDublinCore))
+
+ def test_IMutableDublinCore(self):
+
+ from Products.CMFonFive.interfaces import IMutableDublinCore
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IMutableDublinCore))
+
+ def test_IContentish(self):
+
+ from Products.CMFonFive.interfaces import IContentish
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IContentish))
+
+ def test_IDiscussable(self):
+
+ from Products.CMFonFive.interfaces import IDiscussable
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IDiscussable))
+
+ def test_IDiscussionResponse(self):
+
+ from Products.CMFonFive.interfaces import IDiscussionResponse
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IDiscussionResponse))
+
+ def test_IDynamicType(self):
+
+ from Products.CMFonFive.interfaces import IDynamicType
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IDynamicType))
+
+ def test_ISyndicatable(self):
+
+ from Products.CMFonFive.interfaces import ISyndicatable
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(ISyndicatable))
+
+ def test_IPortalActionsTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalActionsTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalActionsTool))
+
+ def test_IActionProvider(self):
+
+ from Products.CMFonFive.interfaces import IActionProvider
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IActionProvider))
+
+ def test_IPortalCatalogTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalCatalogTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalCatalogTool))
+
+ def test_IIndexableObjectWrapper(self):
+
+ from Products.CMFonFive.interfaces import IIndexableObjectWrapper
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IIndexableObjectWrapper))
+
+ def test_IPortalDiscussionTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalDiscussionTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalDiscussionTool))
+
+ def test_IPortalMemberDataTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalMemberDataTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalMemberDataTool))
+
+ def test_IMemberData(self):
+
+ from Products.CMFonFive.interfaces import IMemberData
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IMemberData))
+
+ def test_ICorePortalMembershipTool(self):
+
+ from Products.CMFonFive.interfaces import ICorePortalMembershipTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(ICorePortalMembershipTool))
+
+ def test_IPortalMetadataTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalMetadataTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalMetadataTool))
+
+ def test_IPortalPropertiesTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalPropertiesTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalPropertiesTool))
+
+ def test_IPortalRegistrationTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalRegistrationTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalRegistrationTool))
+
+ def test_IPortalSkinsTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalSkinsTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalSkinsTool))
+
+ def test_IPortalTypesTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalTypesTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalTypesTool))
+
+ def test_IContentTypeInformation(self):
+
+ from Products.CMFonFive.interfaces import IContentTypeInformation
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IContentTypeInformation))
+
+ def test_IPortalUndoTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalUndoTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalUndoTool))
+
+ def test_IPortalURLTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalURLTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalURLTool))
+
+ def test_IPortalWorkflowTool(self):
+
+ from Products.CMFonFive.interfaces import IPortalWorkflowTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IPortalWorkflowTool))
+
+ def test_IWorkflowDefinition(self):
+
+ from Products.CMFonFive.interfaces import IWorkflowDefinition
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IWorkflowDefinition))
+
+ def test_IDefaultPortalMembershipTool(self):
+
+ from Products.CMFonFive.interfaces import IDefaultPortalMembershipTool
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IDefaultPortalMembershipTool))
+
+ def test_IDocument(self):
+
+ from Products.CMFonFive.interfaces import IDocument
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IDocument))
+
+ def test_IMutableDocument(self):
+
+ from Products.CMFonFive.interfaces import IMutableDocument
+
+ self.failUnless(
+ Z3_Interface.isEqualOrExtendedBy(IMutableDocument))
+
+
+if __name__ == '__main__':
+ unittest.main()
Added: z3/CMFonFive/trunk/www/document_edit.pt
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/www/document_edit.pt Tue Oct 19 19:06:19 2004
@@ -0,0 +1,77 @@
+<tal:x tal:define="here nocall: here/context;">
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master"
+>
+<body>
+<div metal:fill-slot="main" i18n:domain="cmf_default">
+<div class="Desktop">
+
+<h2 i18n:translate="">Edit <span
+ tal:replace="here/getId" i18n:name="objectid">My ID</span></h2>
+
+<form action="document_edit" method="post" enctype="multipart/form-data"
+ tal:attributes="action string:${here/absolute_url}/document_edit"
+>
+
+ <input type="hidden" name="SafetyBelt" value=""
+ tal:attributes="value here/SafetyBelt" />
+
+<table class="FormLayout">
+ <tr>
+ <th i18n:translate="">Title</th>
+ <td>
+ <span tal:replace="here/Title">Title</span>
+ </td>
+ </tr>
+ <tr>
+ <th i18n:translate="">Description</th>
+ <td>
+ <span tal:replace="here/Description">Description</span>
+ </td>
+ </tr>
+ <tr>
+ <th i18n:translate="">Format</th>
+ <td>
+ <input type="radio" name="text_format" value="structured-text" id="cb_stx"
+ tal:attributes="
+ checked python:path('here/text_format')=='structured-text'" />
+ <label for="cb_stx" i18n:translate="">structured-text</label>
+ <input type="radio" name="text_format" value="plain" id="cb_plain"
+ tal:attributes="checked python:path('here/text_format')=='plain'" />
+ <label for="cb_plain" i18n:translate="">plain text</label>
+ <input type="radio" name="text_format" value="html" id="cb_html"
+ tal:attributes="checked python:path('here/text_format')=='html'" />
+ <label for="cb_html" i18n:translate="">html</label>
+ </td>
+ </tr>
+ <tr>
+ <th i18n:translate="">Upload</th>
+ <td>
+ <input type="file" name="file" size="25" />
+ </td>
+ </tr>
+ <tr>
+ <th class="TextField" i18n:translate="">Edit</th>
+ <td class="TextField">
+ <textarea name="text:text" rows="20" cols="80" wrap="soft"
+ tal:content="here/EditableBody"></textarea>
+ </td>
+ </tr>
+ <tr>
+ <td> <br /> </td>
+ <td>
+ <input type="submit" name="change" value="Change"
+ i18n:attributes="value" />
+ <input type="submit" name="change_and_view" value="Change and View"
+ i18n:attributes="value" />
+ </td>
+ </tr>
+</table>
+</form>
+
+</div>
+</div>
+</body>
+</html>
+</tal:x>
Added: z3/CMFonFive/trunk/www/document_view.pt
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/www/document_view.pt Tue Oct 19 19:06:19 2004
@@ -0,0 +1,37 @@
+<tal:x tal:define="here nocall: here/context;">
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/main_template/macros/master">
+ <metal:block fill-slot="base">
+ <base href=""
+ tal:attributes="href python: here.absolute_url() + '/'">
+ </metal:block>
+<body>
+
+<div metal:fill-slot="header">
+
+ <h1 id="DesktopTitle"
+ tal:content="here/Title">Document Title</h1>
+
+ <div id="DesktopDescription" tal:content="here/Description">
+ Document Description goes here.
+ </div>
+
+ <div metal:use-macro="here/content_byline/macros/byline">By Me</div>
+
+</div>
+
+<div metal:fill-slot="main">
+
+<div tal:replace="structure here/CookedBody">Cooked Body</div>
+
+<div class="Discussion">
+ <span tal:replace="structure here/viewThreadsAtBottom"
+ tal:condition="here/viewThreadsAtBottom|nothing"></span>
+</div>
+
+</div>
+
+</body>
+</html>
+</tal:x>
Added: z3/CMFonFive/trunk/www/folder_contents.pt
==============================================================================
--- (empty file)
+++ z3/CMFonFive/trunk/www/folder_contents.pt Tue Oct 19 19:06:19 2004
@@ -0,0 +1,215 @@
+<tal:x tal:define="global here here/context;" />
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+ xmlns:metal="http://xml.zope.org/namespaces/metal"
+ metal:use-macro="here/context/main_template/macros/master"
+>
+<body>
+<div metal:fill-slot="main"
+ tal:define="m_tool here/portal_membership;
+ checkPerm nocall: m_tool/checkPermission;
+ list_here python:checkPerm('List folder contents', here);
+ list_parent python:checkPerm( 'List folder contents', here
+ , 'aq_parent' );
+ "
+ i18n:domain="cmf_default"
+>
+<div tal:condition="not: list_here"
+ tal:define="response request/RESPONSE;
+ url here/absolute_url;
+ "
+ >
+ <span tal:define="redirect python: response.redirect( url )"></span>
+</div>
+
+<!-- This is the desktop area -->
+<div class="Desktop">
+
+<h1 i18n:translate="">Desktop</h1>
+
+<form action="" method="post"
+ tal:attributes="action here/absolute_url">
+ <table class="FormLayout">
+ <tr>
+ <td valign="top">
+ <table class="ContentsList">
+ <!-- Navigate to parent -->
+ <tbody tal:condition="list_parent">
+ <tr valign="top"
+ tal:define="upNav python: hasattr(here.aq_parent, 'portal_url');">
+ <td colspan="3" align="left">
+ <span tal:condition="upNav | nothing">
+ <a href="../folder_contents"
+ ><img src="" alt="[Link]" border="0"
+ tal:attributes="src string:${here/portal_url}/UpFolder_icon.gif"
+ /></a>
+ </span>
+ <span tal:condition="upNav">
+ <span tal:omit-tag="" i18n:translate="">Up to</span>
+ <a href="../folder_contents">Up</a>
+ </span>
+ <span tal:condition="python: not(upNav)">
+ <span class="mild" i18n:translate="">Root</span>
+ </span>
+ </td>
+ </tr>
+ </tbody>
+ <!-- This row holds the "two column list" -->
+ <tr tal:define="global b_start string:0;
+ b_start request/b_start | b_start;
+ filterString python: request.get('folderfilter', '');
+ filter python: here.decodeFolderFilter(filterString);
+ items python: here.listFolderContents(
+ contentFilter=filter);
+ Batch nocall: modules/ZTUtils/Batch;
+ global batch1 python:Batch( items, 20, int(b_start)
+ , orphan=0);
+ global batch2 batch1/next;
+ "
+ >
+ <!-- First column, first half batch in 'batch1'. -->
+ <td colspan="1" align="left" width="49%">
+ <table>
+ <tr valign="top" tal:repeat="item batch1">
+ <td align="left" width="5" nowrap
+ tal:define="folderish item/isPrincipiaFolderish;
+ portalish item/isPortalContent | nothing;
+ global methodID python:( folderish
+ and 'folder_contents'
+ or (portalish and 'view' or '')
+ );
+ global icon item/getIcon | item/icon | nothing
+ ">
+ <input type="checkbox" name="ids:list" value="" id=""
+ tal:attributes="value item/getId;
+ id python: 'cb_' + item.getId()" />
+ </td>
+ <td>
+ <span tal:condition="icon">
+ <a href=""
+ tal:attributes="href string:${item/absolute_url}/${methodID};
+ "
+ ><img src="" alt="" border="0"
+ tal:attributes="src string:${here/portal_url}/${icon};
+ alt item/Type|nothing;"
+ i18n:attributes="alt" /></a>
+ </span>
+ </td>
+ <td>
+ <a href=""
+ tal:attributes="href string:${item/absolute_url}/${methodID};
+ "
+ ><span tal:replace="item/getId">ID</span>
+ <span tal:condition="item/Title"
+ tal:replace="string:(${item/Title})">(Title)</span></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <!-- Spacer column. -->
+ <td width="2%"> </td>
+ <!-- Second column, second half batch in 'batch2'. -->
+ <td colspan="1" width="49%">
+ <table>
+ <tr valign="top" tal:repeat="item batch2">
+ <td align="left" width="5" nowrap
+ tal:define="folderish item/isPrincipiaFolderish;
+ portalish item/isPortalContent | nothing;
+ global methodID python:( folderish
+ and 'folder_contents'
+ or (portalish and 'view' or '')
+ );
+ global icon item/getIcon | item/icon | nothing
+ ">
+ <input type="checkbox" name="ids:list" value="" id=""
+ tal:attributes="value item/getId;
+ id python: 'cb_' + item.getId()" />
+ </td>
+ <td>
+ <span tal:condition="icon">
+ <a href=""
+ tal:attributes="href string:${item/absolute_url}/${methodID};
+ "
+ ><img src="" alt="" border="0"
+ tal:attributes="src string:${here/portal_url}/${icon};
+ alt item/Type|nothing;"
+ i18n:attributes="alt" /></a>
+ </span>
+ </td>
+ <td>
+ <a href=""
+ tal:attributes="href string:${item/absolute_url}/${methodID};
+ "
+ ><span tal:replace="item/getId">ID</span>
+ <span tal:condition="item/Title"
+ tal:replace="string:(${item/Title})">(Title)</span></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+
+ </tr>
+
+ <tr>
+ <td align="left">
+ <span tal:define="p batch1/previous" tal:condition="p">
+ <a href=""
+ tal:attributes="
+ href string:folder_contents?b_start=${p/previous/first}"
+ i18n:translate=""
+ >Previous Items</a>
+ </span>
+ </td>
+ <td> </td>
+ <td align="right">
+ <span tal:define="n batch2/next | nothing" tal:condition="n">
+ <a href=""
+ tal:attributes="
+ href string:folder_contents?b_start=${batch2/end}"
+ i18n:translate=""
+ >Next Items</a>
+ </span>
+ </td>
+ </tr>
+ <!-- end contentList -->
+ </table>
+
+ <table border="0" cellspacing="0" cellpadding="2">
+ <tr>
+ <td align="left" valign="top" width="16"></td>
+ <td align="left" valign="top">
+ <span tal:condition="python: checkPerm('Add portal content', here)
+ and here.allowedContentTypes()">
+ <input type="submit" name="folder_factories:method" value="New..."
+ i18n:attributes="value" />
+ </span>
+ <span tal:condition="python: checkPerm('View management screens', here)">
+ <input type="submit" name="folder_rename_form:method" value="Rename"
+ i18n:attributes="value" />
+ <input type="submit" name="folder_cut:method" value="Cut"
+ i18n:attributes="value" />
+ <input type="submit" name="folder_copy:method" value="Copy"
+ i18n:attributes="value" />
+ <span tal:condition="here/cb_dataValid">
+ <input type="submit" name="folder_paste:method" value="Paste"
+ i18n:attributes="value" />
+ </span>
+ </span>
+ <span tal:condition="python: checkPerm('Delete objects', here)">
+ <input type="submit" name="folder_delete:method" value="Delete"
+ i18n:attributes="value" />
+ </span>
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ </table>
+</form>
+
+<div tal:replace="structure here/folder_filter_form">Filter Form Here</div>
+
+</div>
+</div>
+</body>
+</html>
More information about the z3-checkins
mailing list