r971 - in /zope-cmf1.6/trunk: ./ CMFActionIcons/ CMFCalendar/ CMFCalendar/tests/ CMFCore/ CMFCore/dtml/ CMFCore/exportimport/ CMFCore/interfaces/ CMFCore/tests/ CMFDefault/ CMFDefault/profiles/sample_content/ CMFDefault/skins/control/ CMFDefault/skins/zpt_control/ CMFDefault/tests/ CMFSetup/ CMFTopic/ CMFTopic/tests/ CMFUid/ DCWorkflow/ DCWorkflow/tests/ GenericSetup/ GenericSetup/OFSP/ GenericSetup/ZCatalog/ GenericSetup/ZCatalog/tests/ GenericSetup/doc/SampleSite/ GenericSetup/tests/ GenericSetup/www/ debian/

bzed-guest at users.alioth.debian.org bzed-guest at users.alioth.debian.org
Mon Aug 6 21:16:42 UTC 2007


Author: bzed-guest
Date: Mon Aug  6 21:16:42 2007
New Revision: 971

URL: http://svn.debian.org/wsvn/pkg-zope/?sc=1&rev=971
Log:
new upstream version

Added:
    zope-cmf1.6/trunk/CMFDefault/profiles/sample_content/
      - copied from r970, zope-cmf1.6/branches/upstream/current/CMFDefault/profiles/sample_content/
    zope-cmf1.6/trunk/GenericSetup/doc/SampleSite/
      - copied from r970, zope-cmf1.6/branches/upstream/current/GenericSetup/doc/SampleSite/
Removed:
    zope-cmf1.6/trunk/DCWorkflow/CHANGES.txt
Modified:
    zope-cmf1.6/trunk/CHANGES.txt
    zope-cmf1.6/trunk/CMFActionIcons/version.txt
    zope-cmf1.6/trunk/CMFCalendar/Event.py
    zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py
    zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py
    zope-cmf1.6/trunk/CMFCalendar/version.txt
    zope-cmf1.6/trunk/CMFCore/CatalogTool.py
    zope-cmf1.6/trunk/CMFCore/DynamicType.py
    zope-cmf1.6/trunk/CMFCore/MembershipTool.py
    zope-cmf1.6/trunk/CMFCore/RegistrationTool.py
    zope-cmf1.6/trunk/CMFCore/SkinsTool.py
    zope-cmf1.6/trunk/CMFCore/WorkflowTool.py
    zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml
    zope-cmf1.6/trunk/CMFCore/exportimport/properties.py
    zope-cmf1.6/trunk/CMFCore/interfaces/_content.py
    zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py
    zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py
    zope-cmf1.6/trunk/CMFCore/utils.py
    zope-cmf1.6/trunk/CMFCore/version.txt
    zope-cmf1.6/trunk/CMFDefault/Document.py
    zope-cmf1.6/trunk/CMFDefault/DublinCore.py
    zope-cmf1.6/trunk/CMFDefault/File.py
    zope-cmf1.6/trunk/CMFDefault/Image.py
    zope-cmf1.6/trunk/CMFDefault/Link.py
    zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py
    zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py
    zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py
    zope-cmf1.6/trunk/CMFDefault/skins/control/register.py
    zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py
    zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py
    zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py
    zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py
    zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py
    zope-cmf1.6/trunk/CMFDefault/version.txt
    zope-cmf1.6/trunk/CMFSetup/version.txt
    zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py
    zope-cmf1.6/trunk/CMFTopic/version.txt
    zope-cmf1.6/trunk/CMFUid/version.txt
    zope-cmf1.6/trunk/DCWorkflow/States.py
    zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py
    zope-cmf1.6/trunk/DCWorkflow/exportimport.py
    zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py
    zope-cmf1.6/trunk/DCWorkflow/version.txt
    zope-cmf1.6/trunk/EXTERNALS.txt
    zope-cmf1.6/trunk/GenericSetup/CHANGES.txt
    zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py
    zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py
    zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py
    zope-cmf1.6/trunk/GenericSetup/content.py
    zope-cmf1.6/trunk/GenericSetup/context.py
    zope-cmf1.6/trunk/GenericSetup/interfaces.py
    zope-cmf1.6/trunk/GenericSetup/tests/common.py
    zope-cmf1.6/trunk/GenericSetup/tests/test_content.py
    zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py
    zope-cmf1.6/trunk/GenericSetup/tool.py
    zope-cmf1.6/trunk/GenericSetup/utils.py
    zope-cmf1.6/trunk/GenericSetup/version.txt
    zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt
    zope-cmf1.6/trunk/debian/changelog
    zope-cmf1.6/trunk/debian/control
    zope-cmf1.6/trunk/debian/watch
    zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct
    zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct
    zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct
    zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct
    zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct
    zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct
    zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct
    zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct
    zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct

Modified: zope-cmf1.6/trunk/CHANGES.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CHANGES.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CHANGES.txt (original)
+++ zope-cmf1.6/trunk/CHANGES.txt Mon Aug  6 21:16:42 2007
@@ -1,3 +1,57 @@
+CMF 1.6.4 (2007/05/15):
+
+  (No changes since 1.6.4-beta)
+
+CMF 1.6.4-beta (2007/04/24):
+
+  Other Changes
+
+    - Switch to using GenericSetup 1.2 final release (From 1.2beta).
+
+  Bug Fixes
+
+    - Fixed test breakage / spew when running on Zope 2.8.
+
+    - Use the property API to get the member specific skin, because
+      direct attribute access won't work with PAS based membership.
+      (http://dev.plone.org/plone/ticket/5904)
+
+    - Add POST-only protections to security critical methods (see
+      http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0240).
+
+    - Fixed DST-driven test breakage in CMFCalendar by adding an optional
+      'zone' argument to the DublineCore methods which return string
+      rednitions of date metadata.
+      (http://www.zope.org/Collectors/CMF/476)
+
+CMF 1.6.3 (2007/02/02)
+
+  Bug Fixes
+  
+    - Fixed broken PUT handling for CMFCalendar Events
+      (http://www.zope.org/Collectors/CMF/458)
+
+CMF 1.6.3-beta (2007/01/17)
+
+  Bug Fixes
+
+    - CMFCalendar: Refactored test setup to fix test breakage for Zope 2.9.
+
+    - CMFDefault: The "Sample CMF Content" GenericSetup profile was 
+      registered but missing all of its files and necessary interface 
+      declarations in the CMFDefault content classes.
+      (http://www.zope.org/Collectors/CMF/453)
+
+    - DCWorkflow: Fixed errors and site breakage on GenericSetup import 
+      of transitions with variable expressions set.  They were previously 
+      being imported as text rather tha Expressions.
+
+    - CMFCore.DynamicType: Fixed behaviour regarding default view.
+      DynamicType was making it impossible to use a Zope3-style
+      default view for CMF content types.
+      (http://www.zope.org/Collectors/CMF/459)
+
+
 CMF 1.6.2 (2006/08/15)
 
   Bug Fixes

Modified: zope-cmf1.6/trunk/CMFActionIcons/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFActionIcons/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFActionIcons/version.txt (original)
+++ zope-cmf1.6/trunk/CMFActionIcons/version.txt Mon Aug  6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4

Modified: zope-cmf1.6/trunk/CMFCalendar/Event.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCalendar/Event.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCalendar/Event.py (original)
+++ zope-cmf1.6/trunk/CMFCalendar/Event.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Event: A CMF-enabled Event object.
 
-$Id: Event.py 36890 2005-04-05 10:48:10Z yuppie $
+$Id: Event.py 72179 2007-01-22 18:29:43Z jens $
 """
 
 from AccessControl import ClassSecurityInfo
@@ -360,7 +360,6 @@
                 headers[key] = value
         self._editMetadata(title=headers['Title'],
                           subject=headers['Subject'],
-                          description=headers['Description'],
                           contributors=headers['Contributors'],
                           effective_date=headers['Effective_date'],
                           expiration_date=headers['Expiration_date'],
@@ -372,14 +371,16 @@
     security.declarePublic( 'getMetadataHeaders' )
     def getMetadataHeaders(self):
         """Return RFC-822-style header spec."""
-        hdrlist = DefaultDublinCoreImpl.getMetadataHeaders(self)
-        hdrlist.append( ('StartDate', self.start().strftime("%Y-%m-%d %H:%M:%S") ) )
-        hdrlist.append( ('EndDate',  self.end().strftime("%Y-%m-%d %H:%M:%S") ) )
-        hdrlist.append( ('Location', self.location) )
-        hdrlist.append( ('ContactName', self.contact_name) )
-        hdrlist.append( ('ContactEmail', self.contact_email) )
-        hdrlist.append( ('ContactPhone', self.contact_phone) )
-        hdrlist.append( ('EventURL', self.event_url) )
+        fmt = '%Y-%m-%d %H:%M:%S'
+        hdrlist = [x for x in DefaultDublinCoreImpl.getMetadataHeaders(self)
+                         if x[0] != 'Description']
+        hdrlist.append(('Startdate', self.start().strftime(fmt)))
+        hdrlist.append(('Enddate',  self.end().strftime(fmt)))
+        hdrlist.append(('Location', self.location))
+        hdrlist.append(('Contactname', self.contact_name))
+        hdrlist.append(('Contactemail', self.contact_email))
+        hdrlist.append(('Contactphone', self.contact_phone))
+        hdrlist.append(('Eventurl', self.event_url))
 
         return hdrlist
 
@@ -400,13 +401,14 @@
         try:
             headers, body, format = self.handleText(text=body)
             self.setMetadata(headers)
-            self.setStartDate(headers['StartDate'])
-            self.setEndDate(headers['EndDate'])
+            self.setStartDate(headers['Startdate'])
+            self.setEndDate(headers['Enddate'])
             self.edit( location=headers['Location']
-             , contact_name=headers['ContactName']
-             , contact_email=headers['ContactEmail']
-             , contact_phone=headers['ContactPhone']
-             , event_url=headers['EventURL']
+             , contact_name=headers['Contactname']
+             , contact_email=headers['Contactemail']
+             , contact_phone=headers['Contactphone']
+             , event_url=headers['Eventurl']
+             , description=body
              )
 
         except ResourceLockedError, msg:

Modified: zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py (original)
+++ zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Unit tests for CalendarTool module.
 
-$Id: test_Calendar.py 66245 2006-03-28 17:02:36Z jens $
+$Id: test_Calendar.py 70893 2006-10-23 18:26:54Z jens $
 """
 
 import unittest
@@ -30,7 +30,8 @@
 from AccessControl.SecurityManagement import noSecurityManager
 from AccessControl.User import UnrestrictedUser
 from DateTime import DateTime
-from Products.ExternalMethod.ExternalMethod import manage_addExternalMethod
+import Products
+from Products.Five import zcml
 from Products.TemporaryFolder.TemporaryFolder import MountedTemporaryFolder
 from Products.Transience.Transience import TransientObjectContainer
 from Products.CMFCore.tests.base.testcase import WarningInterceptor
@@ -43,6 +44,14 @@
     from Products.CMFCore.utils import transaction
 from Products.CMFCore import Skinnable
 
+try:
+    from zope.testing.cleanup import cleanUp
+except:
+    # BBB: for Zope 2.8
+    from zope.testing.cleanup import CleanUp
+    cleanup_ob = CleanUp()
+    cleanUp = cleanup_ob.cleanUp
+
 
 class CalendarTests(unittest.TestCase):
 
@@ -88,6 +97,12 @@
 
     def setUp(self):
         self._trap_warning_output()
+        zcml.load_config('meta.zcml', Products.Five)
+        zcml.load_config('configure.zcml', Products.Five)
+        zcml.load_config('configure.zcml', Products.GenericSetup)
+        zcml.load_config('configure.zcml', Products.CMFCore)
+        zcml.load_config('configure.zcml', Products.CMFDefault)
+        zcml.load_config('configure.zcml', Products.DCWorkflow)
         self._oldSkindata = Skinnable.SKINDATA.copy()
         transaction.begin()
 
@@ -96,23 +111,13 @@
         newSecurityManager(None,
                            UnrestrictedUser('god', 'god', ['Manager'], '') )
 
-        #app.manage_addProduct['CMFDefault'].manage_addCMFSite('CalendarTest')
-        addConfiguredSite(app, 'CalendarTest', 'CMFDefault:default')
+        factory = app.manage_addProduct['CMFDefault'].addConfiguredSite
+        factory('CalendarTest', 'CMFDefault:default', snapshot=False,
+                extension_ids=('CMFCalendar:default',))
 
         self.Site = app.CalendarTest
 
-        manage_addExternalMethod(app.CalendarTest,
-                                 id='install_events',
-                                 title="Install Events",
-                                 module="CMFCalendar.Install",
-                                 function="install")
-
-        ExMethod = app.restrictedTraverse('/CalendarTest/install_events')
-        ExMethod()
         self.Tool = app.CalendarTest.portal_calendar
-
-        self.Site.clearCurrentSkin()
-        self.Site.setupCurrentSkin(app.REQUEST)
 
         # sessioning setup
         if getattr(app, 'temp_folder', None) is None:
@@ -131,6 +136,7 @@
         self.app._p_jar.close()
         Skinnable.SKINDATA = self._oldSkindata
         self._free_warning_output()
+        cleanUp()
 
     def _testURL(self,url,params=None):
         Site = self.Site

Modified: zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py (original)
+++ zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Unit tests for Event module.
 
-$Id: test_Event.py 38418 2005-09-09 08:40:13Z yuppie $
+$Id: test_Event.py 74056 2007-04-09 19:37:51Z tseaver $
 """
 
 from unittest import TestCase, TestSuite, makeSuite, main
@@ -121,6 +121,25 @@
                          , startAMPM="AM"
                          )
 
+EVENT_TXT = """\
+Title: Test Event
+Subject: Foosubject
+Contributors: Jim
+Effective_date: 2002-01-01T00:00:00Z
+Expiration_date: 2009-12-31T00:00:00Z
+StartDate: 2006/02/23 18:00
+EndDate: 2006/02/23 23:00
+Location: Spuds and Suds, River Street, Anytown
+Language: French
+Rights: Anytown Gazetteer
+ContactName: Jim
+ContactEmail: jim at example.com
+ContactPhone: (888) 555-1212
+EventURL: http://www.example.com
+Creator: Jim
+
+Fundraiser for disabled goldfish
+"""
 
 class EventPUTTests(RequestTest):
 
@@ -140,10 +159,40 @@
         self.assertEqual( d.Description(), '' )
         self.assertEqual( d.Subject(), () )
         self.assertEqual( d.Contributors(), () )
-        self.assertEqual( d.EffectiveDate(), 'None' )
-        self.assertEqual( d.ExpirationDate(), 'None' )
+        self.assertEqual( d.EffectiveDate('UTC'), 'None' )
+        self.assertEqual( d.ExpirationDate('UTC'), 'None' )
         self.assertEqual( d.Language(), '' )
         self.assertEqual( d.Rights(), '' )
+        self.assertEqual( d.location, '' )
+        self.assertEqual( d.contact_name, '' )
+        self.assertEqual( d.contact_email, '' )
+        self.assertEqual( d.contact_phone, '' )
+        self.assertEqual( d.event_url, '' )
+
+    def test_PutWithMetadata(self):
+        self.REQUEST['BODY'] = EVENT_TXT
+        self.REQUEST.environ['CONTENT_TYPE'] = 'text/html'
+        d = self._makeOne('foo')
+        d.PUT(self.REQUEST, self.RESPONSE)
+
+        self.assertEqual( d.Title(), 'Test Event' )
+        self.assertEqual( d.Format(), 'text/html' )
+        self.assertEqual( d.Description().strip()
+                        , 'Fundraiser for disabled goldfish' 
+                        )
+        self.assertEqual( d.Subject(), ('Foosubject',) )
+        self.assertEqual( d.Contributors(), ('Jim',) )
+        self.assertEqual( d.EffectiveDate('UTC'), '2002-01-01 00:00:00' )
+        self.assertEqual( d.ExpirationDate('UTC'), '2009-12-31 00:00:00' )
+        self.assertEqual( d.Language(), 'French' )
+        self.assertEqual( d.Rights(), 'Anytown Gazetteer' )
+        self.assertEqual( d.location, 'Spuds and Suds, River Street, Anytown' )
+        self.assertEqual( d.contact_name, 'Jim' )
+        self.assertEqual( d.contact_email, 'jim at example.com' )
+        self.assertEqual( d.contact_phone, '(888) 555-1212' )
+        self.assertEqual( d.event_url, 'http://www.example.com' )
+        self.assertEqual( d.start(), DateTime('2006/02/23 18:00') )
+        self.assertEqual( d.end(), DateTime('2006/02/23 23:00') )
 
 
 def test_suite():

Modified: zope-cmf1.6/trunk/CMFCalendar/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCalendar/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCalendar/version.txt (original)
+++ zope-cmf1.6/trunk/CMFCalendar/version.txt Mon Aug  6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4

Modified: zope-cmf1.6/trunk/CMFCore/CatalogTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/CatalogTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/CatalogTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/CatalogTool.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Basic portal catalog.
 
-$Id: CatalogTool.py 69316 2006-07-31 16:54:39Z shh $
+$Id: CatalogTool.py 74720 2007-04-24 20:19:37Z tseaver $
 """
 
 from warnings import warn
@@ -134,10 +134,7 @@
 
     def __init__(self):
         ZCatalog.__init__(self, self.getId())
-        warn('CatalogTool._initIndexes is deprecated and will be removed in '
-             'CMF 2.0.',
-             DeprecationWarning)
-        self._initIndexes()
+        self._initIndexes(internal_cmf_16=True)
 
     #
     #   Subclass extension interface
@@ -216,7 +213,11 @@
                , 'portal_type'
                )
 
-    def _initIndexes(self):
+    def _initIndexes(self, internal_cmf_16=False):
+        if not internal_cmf_16:
+            warn('CatalogTool._initIndexes is deprecated and will be '
+                 'removed in CMF 2.0.', DeprecationWarning)
+
         # ZCTextIndex lexicons
         for id, splitter, normalizer, sw_remover in self.enumerateLexicons():
             lexicon = PLexicon(id, '', splitter, normalizer, sw_remover)

Modified: zope-cmf1.6/trunk/CMFCore/DynamicType.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/DynamicType.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/DynamicType.py (original)
+++ zope-cmf1.6/trunk/CMFCore/DynamicType.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ DynamicType: Mixin for dynamic properties.
 
-$Id: DynamicType.py 38612 2005-09-25 13:02:39Z jens $
+$Id: DynamicType.py 71508 2006-12-09 15:02:06Z philikon $
 """
 
 from urllib import quote
@@ -23,6 +23,14 @@
 from interfaces.Dynamic import DynamicType as IDynamicType
 from utils import getToolByName
 
+try:
+    from zope.app.publisher.browser import queryDefaultViewName
+    from zope.component import queryMultiAdapter
+    def queryView(obj, name, request):
+        return queryMultiAdapter((obj, request), name=name)
+except ImportError:
+    # BBB for Zope 2.8
+    from zope.component import queryDefaultViewName, queryView
 
 class DynamicType:
     """
@@ -117,6 +125,18 @@
 
         stack = REQUEST['TraversalRequestNameStack']
         key = stack and stack[-1] or '(Default)'
+
+        # if there's a Zope3-style default view name set and the
+        # corresponding view exists, take that in favour of the FTI's
+        # default view
+        if key == '(Default)':
+            viewname = queryDefaultViewName(self, REQUEST)
+            if (viewname and
+                queryView(self, viewname, REQUEST) is not None):
+                stack.append(viewname)
+                REQUEST._hacked_path = 1
+                return
+
         ti = self.getTypeInfo()
         method_id = ti and ti.queryMethodID(key, context=self)
         if method_id:

Modified: zope-cmf1.6/trunk/CMFCore/MembershipTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/MembershipTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/MembershipTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/MembershipTool.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Basic membership tool.
 
-$Id: MembershipTool.py 68523 2006-06-08 16:23:41Z efge $
+$Id: MembershipTool.py 74141 2007-04-15 04:39:02Z alecm $
 """
 
 import logging
@@ -45,6 +45,7 @@
 from utils import _getAuthenticatedUser
 from utils import getToolByName
 from utils import UniqueObject
+from utils import postonly
 
 
 logger = logging.getLogger('CMFCore.MembershipTool')
@@ -89,7 +90,7 @@
     manage_mapRoles = DTMLFile('membershipRolemapping', _dtmldir )
 
     security.declareProtected(SetOwnPassword, 'setPassword')
-    def setPassword(self, password, domains=None):
+    def setPassword(self, password, domains=None, REQUEST=None):
         '''Allows the authenticated member to set his/her own password.
         '''
         registration = getToolByName(self, 'portal_registration', None)
@@ -102,6 +103,7 @@
             member.setSecurityProfile(password=password, domains=domains)
         else:
             raise BadRequest('Not logged in.')
+    setPassword = postonly(setPassword)
 
     security.declarePublic('getAuthenticatedMember')
     def getAuthenticatedMember(self):
@@ -166,7 +168,7 @@
         return roles
 
     security.declareProtected(ManagePortal, 'setRoleMapping')
-    def setRoleMapping(self, portal_role, userfolder_role):
+    def setRoleMapping(self, portal_role, userfolder_role, REQUEST=None):
         """
         set the mapping of roles between roles understood by
         the portal and roles coming from outside user sources
@@ -182,6 +184,7 @@
                title  ='Mapping updated',
                message='The Role mappings have been updated',
                action ='manage_mapRoles')
+    setRoleMapping = postonly(setRoleMapping)
 
     security.declareProtected(ManagePortal, 'getMappedRole')
     def getMappedRole(self, portal_role):
@@ -282,7 +285,7 @@
     createMemberarea = createMemberArea
 
     security.declareProtected(ManageUsers, 'deleteMemberArea')
-    def deleteMemberArea(self, member_id):
+    def deleteMemberArea(self, member_id, REQUEST=None):
         """ Delete member area of member specified by member_id.
         """
         members = self.getMembersFolder()
@@ -293,6 +296,7 @@
             return 1
         else:
             return 0
+    deleteMemberArea = postonly(deleteMemberArea)
 
     security.declarePublic('isAnonymousUser')
     def isAnonymousUser(self):
@@ -413,7 +417,8 @@
         return tuple(local_roles)
 
     security.declareProtected(View, 'setLocalRoles')
-    def setLocalRoles(self, obj, member_ids, member_role, reindex=1):
+    def setLocalRoles(self, obj, member_ids, member_role, reindex=1,
+                      REQUEST=None):
         """ Add local roles on an item.
         """
         if ( _checkPermission(ChangeLocalRoles, obj)
@@ -430,9 +435,11 @@
             # reindexObjectSecurity, which is in CMFCatalogAware and
             # thus PortalContent and PortalFolder.
             obj.reindexObjectSecurity()
+    setLocalRoles = postonly(setLocalRoles)
 
     security.declareProtected(View, 'deleteLocalRoles')
-    def deleteLocalRoles(self, obj, member_ids, reindex=1, recursive=0):
+    def deleteLocalRoles(self, obj, member_ids, reindex=1, recursive=0,
+                         REQUEST=None):
         """ Delete local roles of specified members.
         """
         if _checkPermission(ChangeLocalRoles, obj):
@@ -448,6 +455,7 @@
         if reindex:
             # reindexObjectSecurity is always recursive
             obj.reindexObjectSecurity()
+    deleteLocalRoles = postonly(deleteLocalRoles)
 
     security.declarePrivate('addMember')
     def addMember(self, id, password, roles, domains, properties=None):
@@ -471,7 +479,7 @@
 
     security.declareProtected(ManageUsers, 'deleteMembers')
     def deleteMembers(self, member_ids, delete_memberareas=1,
-                      delete_localroles=1):
+                      delete_localroles=1, REQUEST=None):
         """ Delete members specified by member_ids.
         """
 
@@ -511,6 +519,7 @@
                                    reindex=1, recursive=1 )
 
         return tuple(member_ids)
+    deleteMembers = postonly(deleteMembers)
 
     security.declarePublic('getHomeFolder')
     def getHomeFolder(self, id=None, verifyPermission=0):

Modified: zope-cmf1.6/trunk/CMFCore/RegistrationTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/RegistrationTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/RegistrationTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/RegistrationTool.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Basic user registration tool.
 
-$Id: RegistrationTool.py 36633 2004-10-29 14:37:36Z jens $
+$Id: RegistrationTool.py 73957 2007-03-31 18:25:46Z alecm $
 """
 
 import re
@@ -32,6 +32,7 @@
 from utils import _limitGrantedRoles
 from utils import getToolByName
 from utils import _dtmldir
+from utils import postonly
 
 from interfaces.portal_registration \
         import portal_registration as IRegistrationTool
@@ -128,7 +129,7 @@
 
     security.declareProtected(AddPortalMember, 'addMember')
     def addMember(self, id, password, roles=('Member',), domains='',
-                  properties=None):
+                  properties=None, REQUEST=None):
         '''Creates a PortalMember and returns it. The properties argument
         can be a mapping with additional member properties. Raises an
         exception if the given id already exists, the password does not
@@ -160,6 +161,7 @@
         member = membership.getMemberById(id)
         self.afterAdd(member, id, password, properties)
         return member
+    addMember = postonly(addMember)
 
     security.declareProtected(AddPortalMember, 'isMemberIdAllowed')
     def isMemberIdAllowed(self, id):

Modified: zope-cmf1.6/trunk/CMFCore/SkinsTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/SkinsTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/SkinsTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/SkinsTool.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """Portal skins tool.
 
-$Id: SkinsTool.py 36910 2005-04-07 16:37:47Z yuppie $
+$Id: SkinsTool.py 74143 2007-04-15 05:06:19Z alecm $
 """
 
 from AccessControl import ClassSecurityInfo
@@ -306,8 +306,8 @@
         mtool = getToolByName(self, 'portal_membership')
         utool = getToolByName(self, 'portal_url')
         member = mtool.getAuthenticatedMember()
-        if hasattr(aq_base(member), 'portal_skin'):
-            mskin = member.portal_skin
+        if hasattr(aq_base(member), 'getProperty'):
+            mskin = member.getProperty('portal_skin', None)
             if mskin:
                 req = self.REQUEST
                 cookie = req.cookies.get(self.request_varname, None)

Modified: zope-cmf1.6/trunk/CMFCore/WorkflowTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/WorkflowTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/WorkflowTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/WorkflowTool.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Basic workflow tool.
 
-$Id: WorkflowTool.py 40346 2005-11-23 17:15:03Z yuppie $
+$Id: WorkflowTool.py 73954 2007-03-31 13:53:30Z alecm $
 """
 
 import sys
@@ -33,6 +33,7 @@
 from utils import _dtmldir
 from utils import getToolByName
 from utils import UniqueObject
+from utils import postonly
 from WorkflowCore import ObjectDeleted
 from WorkflowCore import ObjectMoved
 from WorkflowCore import WorkflowException
@@ -188,6 +189,7 @@
         if REQUEST is not None:
             return self.manage_selectWorkflows(REQUEST,
                             manage_tabs_message='Changed.')
+    manage_changeWorkflows = postonly(manage_changeWorkflows)
 
     #
     #   portal_workflow implementation.
@@ -437,7 +439,7 @@
     #   Administration methods
     #
     security.declareProtected( ManagePortal, 'setDefaultChain')
-    def setDefaultChain(self, default_chain):
+    def setDefaultChain(self, default_chain, REQUEST=None):
 
         """ Set the default chain for this tool
         """
@@ -450,9 +452,11 @@
                 ids.append(wf_id)
 
         self._default_chain = tuple(ids)
+    setDefaultChain = postonly(setDefaultChain)
 
     security.declareProtected( ManagePortal, 'setChainForPortalTypes')
-    def setChainForPortalTypes(self, pt_names, chain, verify=True):
+    def setChainForPortalTypes(self, pt_names, chain, verify=True,
+                               REQUEST=None):
         """ Set a chain for a specific portal type.
         """
         cbt = self._chains_by_type
@@ -468,6 +472,7 @@
             if verify and not (type_id in ti_ids):
                 continue
             cbt[type_id] = tuple(chain)
+    setChainForPortalTypes = postonly(setChainForPortalTypes)
 
     security.declareProtected( ManagePortal, 'updateRoleMappings')
     def updateRoleMappings(self, REQUEST=None):
@@ -486,6 +491,7 @@
                                                '%d object(s) updated.' % count)
         else:
             return count
+    updateRoleMappings = postonly(updateRoleMappings)
 
     security.declarePrivate('getWorkflowById')
     def getWorkflowById(self, wf_id):

Modified: zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml (original)
+++ zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml Mon Aug  6 21:16:42 2007
@@ -50,7 +50,7 @@
 Click the button below to update the security settings of all
 workflow-aware objects in this portal.
 
-<form action="updateRoleMappings" method="GET">
+<form action="updateRoleMappings" method="POST">
 <input type="submit" name="submit" value="Update security settings" />
 </form>
 </p>

Modified: zope-cmf1.6/trunk/CMFCore/exportimport/properties.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/exportimport/properties.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/exportimport/properties.py (original)
+++ zope-cmf1.6/trunk/CMFCore/exportimport/properties.py Mon Aug  6 21:16:42 2007
@@ -68,7 +68,7 @@
 
     importer = zapi.queryMultiAdapter((site, context), IBody)
     if importer is None:
-        logger.warning('Import adapter misssing.')
+        logger.warning('Import adapter missing.')
         return
 
     importer.body = body
@@ -81,7 +81,7 @@
 
     exporter = zapi.queryMultiAdapter((site, context), IBody)
     if exporter is None:
-        logger.warning('Export adapter misssing.')
+        logger.warning('Export adapter missing.')
         return
 
     context.writeDataFile(_FILENAME, exporter.body, exporter.mime_type)

Modified: zope-cmf1.6/trunk/CMFCore/interfaces/_content.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/interfaces/_content.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/interfaces/_content.py (original)
+++ zope-cmf1.6/trunk/CMFCore/interfaces/_content.py Mon Aug  6 21:16:42 2007
@@ -256,44 +256,59 @@
         o 'initial caps' names are reserved for strings.
         """
 
-    def Date():
+    def Date(zone=None):
         """ Return the DCMI Date element (default resource date).
 
         o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ'.
 
-        o Permission:  View
-        """
-
-    def CreationDate():
+        o If 'zone' is 'None', return the time in the system default
+          timezone.
+
+        o Permission:  View
+        """
+
+    def CreationDate(zone=None):
         """ Return the DCMI Date element (date resource created).
 
         o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ'.
 
-        o Permission:  View
-        """
-
-    def EffectiveDate():
+        o If 'zone' is 'None', return the time in the system default
+          timezone.
+
+        o Permission:  View
+        """
+
+    def EffectiveDate(zone=None):
         """ Return the DCMI Date element (date resource becomes effective).
 
         o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ', or
           None.
 
-        o Permission:  View
-        """
-
-    def ExpirationDate():
+        o If 'zone' is 'None', return the time in the system default
+          timezone.
+
+        o Permission:  View
+        """
+
+    def ExpirationDate(zone=None):
         """ Return the DCMI Date element (date resource expires).
 
         o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ', or
           None.
 
-        o Permission:  View
-        """
-
-    def ModificationDate():
+        o If 'zone' is 'None', return the time in the system default
+          timezone.
+
+        o Permission:  View
+        """
+
+    def ModificationDate(zone=None):
         """ DCMI Date element - date resource last modified.
 
         o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ'.
+
+        o If 'zone' is 'None', return the time in the system default
+          timezone.
 
         o Permission:  View
         """

Modified: zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py (original)
+++ zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py Mon Aug  6 21:16:42 2007
@@ -12,19 +12,18 @@
 ##############################################################################
 """ Unit tests for DynamicType module.
 
-$Id: test_DynamicType.py 38612 2005-09-25 13:02:39Z jens $
+$Id: test_DynamicType.py 71509 2006-12-09 15:05:30Z philikon $
 """
 
 from unittest import TestCase, TestSuite, makeSuite, main
 import Testing
-try:
-    import Zope2
-except ImportError: # BBB: for Zope 2.7
-    import Zope as Zope2
+import Zope2
 Zope2.startup()
 
+from StringIO import StringIO
+
 from Acquisition import Implicit
-from ZPublisher.BaseRequest import BaseRequest
+from ZPublisher.HTTPRequest import HTTPRequest
 from ZPublisher.HTTPResponse import HTTPResponse
 
 from Products.CMFCore.DynamicType import DynamicType
@@ -36,56 +35,145 @@
 from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI
 from Products.CMFCore.TypesTool import TypesTool
 
-
-class DummyContent(DynamicType, Implicit):
+import zope.component
+from zope.interface import Interface, implements
+from zope.component.tests.placelesssetup import PlacelessSetup
+from zope.publisher.interfaces.browser import IBrowserRequest
+from zope.app.publisher.interfaces.browser import IBrowserView
+
+from Products.Five.traversable import FiveTraversable
+from Products.Five.traversable import Traversable
+from Products.Five.browser import BrowserView
+from zope.app.traversing.adapters import Traverser
+from zope.app.traversing.interfaces import ITraverser, ITraversable
+
+def defineDefaultViewName(name, for_=None):
+    try:
+        from zope.component.interfaces import IDefaultViewName
+        zope.component.provideAdapter(name, (for_, IBrowserRequest),
+                                      IDefaultViewName, '')
+    except ImportError:
+        # BBB for Zope 2.8
+        pres = zope.component.getService(zope.component.Presentation)
+        pres.setDefaultViewName(for_, IBrowserRequest, name)
+
+class IDummyContent(Interface):
+    pass
+
+class DummyContent(Traversable, DynamicType, Implicit):
     """ Basic dynamic content class.
     """
-
+    implements(IDummyContent)
     portal_type = 'Dummy Content 15'
 
 
+class DummyView(BrowserView):
+    """This is a view"""
+
+
 class DynamicTypeTests(TestCase):
 
+    def test_z2interfaces(self):
+        from Interface.Verify import verifyClass
+        from Products.CMFCore.interfaces.Dynamic \
+                import DynamicType as IDynamicType
+
+        verifyClass(IDynamicType, DynamicType)
+
+    def test_z3interfaces(self):
+        from zope.interface.verify import verifyClass
+        from Products.CMFCore.interfaces import IDynamicType
+        verifyClass(IDynamicType, DynamicType)
+
+class DynamicTypeDefaultTraversalTests(PlacelessSetup, TestCase):
+
     def setUp(self):
+        super(DynamicTypeDefaultTraversalTests, self).setUp()
+
         self.site = DummySite('site')
         self.site._setObject( 'portal_types', TypesTool() )
         fti = FTIDATA_CMF15[0].copy()
         self.site.portal_types._setObject( 'Dummy Content 15', FTI(**fti) )
         self.site._setObject( 'foo', DummyContent() )
-
-    def test_z2interfaces(self):
-        from Interface.Verify import verifyClass
-        from Products.CMFCore.interfaces.Dynamic \
-                import DynamicType as IDynamicType
-
-        verifyClass(IDynamicType, DynamicType)
-
-    def test_z3interfaces(self):
+        dummy_view = self.site._setObject( 'dummy_view', DummyObject() )
+
         try:
-            from zope.interface.verify import verifyClass
-            from Products.CMFCore.interfaces import IDynamicType
+            from zope.component import provideAdapter
+            provideAdapter(FiveTraversable, (None,), ITraversable)
+            provideAdapter(Traverser, (None,), ITraverser)
         except ImportError:
-            # BBB: for Zope 2.7
-            return
-
-        verifyClass(IDynamicType, DynamicType)
-
-    def test___before_publishing_traverse__(self):
-        dummy_view = self.site._setObject( 'dummy_view', DummyObject() )
+            # BBB for Zope 2.8
+            from zope.app.tests import ztapi
+            ztapi.provideAdapter(None, ITraversable, FiveTraversable)
+            ztapi.provideAdapter(None, ITraverser, Traverser)
+
+    def test_default_view_from_fti(self):
         response = HTTPResponse()
         environment = { 'URL': '',
                         'PARENTS': [self.site],
                         'REQUEST_METHOD': 'GET',
+                        'SERVER_NAME': 'localhost',
+                        'SERVER_PORT': '80',
+                        'REQUEST_METHOD': 'GET',
                         'steps': [],
-                        '_hacked_path': 0,
-                        'response': response }
-        r = BaseRequest(environment)
+                        '_hacked_path': 0}
+        r = HTTPRequest(StringIO(), environment, response)
+        r.other.update(environment)
 
         r.traverse('foo')
         self.assertEqual( r.URL, '/foo/dummy_view' )
         self.assertEqual( r.response.base, '/foo/',
                           'CMF Collector issue #192 (wrong base): %s'
                           % (r.response.base or 'empty',) )
+
+    def test_default_viewname_but_no_view_doesnt_override_fti(self):
+        response = HTTPResponse()
+        environment = { 'URL': '',
+                        'PARENTS': [self.site],
+                        'REQUEST_METHOD': 'GET',
+                        'SERVER_NAME': 'localhost',
+                        'SERVER_PORT': '80',
+                        'REQUEST_METHOD': 'GET',
+                        'steps': [],
+                        '_hacked_path': 0 }
+        r = HTTPRequest(StringIO(), environment, response)
+        r.other.update(environment)
+
+        # we define a Zope3-style default view name, but no
+        # corresponding view, no change in behaviour expected
+        defineDefaultViewName('index.html', IDummyContent)
+        r.traverse('foo')
+        self.assertEqual( r.URL, '/foo/dummy_view' )
+        self.assertEqual( r.response.base, '/foo/' )
+
+    def test_default_viewname_overrides_fti(self):
+        response = HTTPResponse()
+        environment = { 'URL': '',
+                        'PARENTS': [self.site],
+                        'REQUEST_METHOD': 'GET',
+                        'SERVER_PORT': '80',
+                        'REQUEST_METHOD': 'GET',
+                        'steps': [],
+                        'SERVER_NAME': 'localhost',
+                        '_hacked_path': 0 }
+        r = HTTPRequest(StringIO(), environment, response)
+        r.other.update(environment)
+
+        # we define a Zope3-style default view name for which a view
+        # actually exists
+        defineDefaultViewName('index.html', IDummyContent)
+        try:
+            from zope.component import provideAdapter
+            provideAdapter(DummyView, (DummyContent, IBrowserRequest),
+                           IBrowserView, 'index.html')
+        except ImportError:
+            # BBB for Zope 2.8
+            from zope.app.tests import ztapi
+            ztapi.browserView(IDummyContent, 'index.html', DummyView)
+
+        r.traverse('foo')
+        self.assertEqual( r.URL, '/foo/index.html' )
+        self.assertEqual( r.response.base, '/foo/' )
 
 
 class DynamicTypeSecurityTests(SecurityRequestTest):
@@ -122,6 +210,7 @@
 def test_suite():
     return TestSuite((
         makeSuite(DynamicTypeTests),
+        makeSuite(DynamicTypeDefaultTraversalTests),
         makeSuite(DynamicTypeSecurityTests),
         ))
 

Modified: zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py (original)
+++ zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Unit tests for PortalContent module.
 
-$Id: test_PortalContent.py 69189 2006-07-18 18:48:28Z tseaver $
+$Id: test_PortalContent.py 74719 2007-04-24 20:13:48Z tseaver $
 """
 
 from unittest import TestCase, TestSuite, makeSuite, main
@@ -36,12 +36,13 @@
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyUserFolder
 from Products.CMFCore.tests.base.testcase import SecurityRequestTest
+from Products.CMFCore.tests.base.testcase import WarningInterceptor
 from Products.CMFCore.tests.base.dummy import DummyTool
 from Products.CMFCore.tests.base.dummy import DummyContent
 from Products.CMFCore.tests.base.dummy import DummyObject
 from OFS.Folder import Folder
 
-class PortalContentTests(TestCase):
+class PortalContentTests(TestCase, WarningInterceptor):
 
     def test_z2interfaces(self):
         from Interface.Verify import verifyClass
@@ -88,6 +89,7 @@
         # in unfixed version fail here with AttributeError
         # can end up with this arrangement using _getAliases though
         # in fixed version, falls through to _getViewFor, which is BBB
+        self._trap_warning_output()
         self.assertEqual( ob(), 'dummy' )
 
     def test_BlankDefaultAlias(self):
@@ -96,6 +98,7 @@
                        )
         ob = self._setupCallTests(test_aliases)
         # blank default is BBB
+        self._trap_warning_output()
         self.assertEqual( ob(), 'dummy' )
 
     def test_SpecificAlias(self):

Modified: zope-cmf1.6/trunk/CMFCore/utils.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/utils.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/utils.py (original)
+++ zope-cmf1.6/trunk/CMFCore/utils.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Utility functions.
 
-$Id: utils.py 41663 2006-02-18 13:57:52Z jens $
+$Id: utils.py 73951 2007-03-31 09:50:35Z alecm $
 """
 
 from os import path as os_path
@@ -862,3 +862,14 @@
 
     def __init__(self, **kw):
         self.__dict__.update(kw)
+
+# postonly decorator is only available in Zope 2.8.9, 2.9.7, 2.10.3 and 2.11,
+# or in Hotfix_20070320.
+try:
+    from AccessControl.requestmethod import postonly
+except ImportError:
+    try:
+        from Products.Hotfix_20070320 import postonly
+    except ImportError:
+        def postonly(callable):
+            return callable

Modified: zope-cmf1.6/trunk/CMFCore/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/version.txt (original)
+++ zope-cmf1.6/trunk/CMFCore/version.txt Mon Aug  6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4

Modified: zope-cmf1.6/trunk/CMFDefault/Document.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/Document.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/Document.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/Document.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Basic textual content object, supporting HTML, STX and plain text.
 
-$Id: Document.py 40364 2005-11-24 18:23:00Z yuppie $
+$Id: Document.py 70021 2006-09-07 10:16:08Z jens $
 """
 
 from AccessControl import ClassSecurityInfo
@@ -31,12 +31,17 @@
 from Products.CMFCore.PortalContent import PortalContent
 from Products.CMFCore.utils import contributorsplitter
 from Products.CMFCore.utils import keywordsplitter
-
+from zope.interface import implements
+
+from Products.GenericSetup.interfaces import IDAVAware
 from DublinCore import DefaultDublinCoreImpl
 from exceptions import EditingConflict
 from exceptions import ResourceLockedError
-from interfaces.Document import IDocument
-from interfaces.Document import IMutableDocument
+from interfaces.Document import IDocument as z2IDocument
+from interfaces.Document import IMutableDocument as z2IMutableDocument
+from interfaces import IDocument
+from interfaces import IMutableDocument
+
 from permissions import ModifyPortalContent
 from permissions import View
 from utils import _dtmldir
@@ -90,7 +95,8 @@
 class Document(PortalContent, DefaultDublinCoreImpl):
     """ A Document - Handles both StructuredText and HTML """
 
-    __implements__ = (IDocument, IMutableDocument,
+    implements(IDocument, IMutableDocument, IDAVAware)
+    __implements__ = (z2IDocument, z2IMutableDocument,
                       PortalContent.__implements__,
                       DefaultDublinCoreImpl.__implements__)
 

Modified: zope-cmf1.6/trunk/CMFDefault/DublinCore.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/DublinCore.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/DublinCore.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/DublinCore.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Dublin Core support for content types.
 
-$Id: DublinCore.py 36913 2005-04-09 23:00:10Z slinkp $
+$Id: DublinCore.py 74056 2007-04-09 19:37:51Z tseaver $
 """
 
 from AccessControl import ClassSecurityInfo
@@ -177,44 +177,54 @@
         return self.listContributors()
 
     security.declareProtected(View, 'Date')
-    def Date( self ):
+    def Date( self, zone=None ):
         """ Dublin Core Date element - default date.
         """
+        if zone is None:
+            zone = _zone
         # Return effective_date if set, modification date otherwise
         date = getattr(self, 'effective_date', None )
         if date is None:
             date = self.modified()
-        return date.toZone(_zone).ISO()
+        return date.toZone(zone).ISO()
 
     security.declareProtected(View, 'CreationDate')
-    def CreationDate( self ):
+    def CreationDate( self, zone=None ):
         """ Dublin Core Date element - date resource created.
         """
+        if zone is None:
+            zone = _zone
         # return unknown if never set properly
         if self.creation_date:
-            return self.creation_date.toZone(_zone).ISO()
+            return self.creation_date.toZone(zone).ISO()
         else:
             return 'Unknown'
 
     security.declareProtected(View, 'EffectiveDate')
-    def EffectiveDate( self ):
+    def EffectiveDate( self, zone=None ):
         """ Dublin Core Date element - date resource becomes effective.
         """
+        if zone is None:
+            zone = _zone
         ed = getattr( self, 'effective_date', None )
-        return ed and ed.toZone(_zone).ISO() or 'None'
+        return ed and ed.toZone(zone).ISO() or 'None'
 
     security.declareProtected(View, 'ExpirationDate')
-    def ExpirationDate( self ):
+    def ExpirationDate( self, zone=None ):
         """ Dublin Core Date element - date resource expires.
         """
+        if zone is None:
+            zone = _zone
         ed = getattr( self, 'expiration_date', None )
-        return ed and ed.toZone(_zone).ISO() or 'None'
+        return ed and ed.toZone(zone).ISO() or 'None'
 
     security.declareProtected(View, 'ModificationDate')
-    def ModificationDate( self ):
+    def ModificationDate( self, zone=None ):
         """ Dublin Core Date element - date resource last modified.
         """
-        return self.modified().toZone(_zone).ISO()
+        if zone is None:
+            zone = _zone
+        return self.modified().toZone(zone).ISO()
 
     security.declareProtected(View, 'Type')
     def Type( self ):

Modified: zope-cmf1.6/trunk/CMFDefault/File.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/File.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/File.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/File.py Mon Aug  6 21:16:42 2007
@@ -14,7 +14,7 @@
 Zope's built-in File object, but modifies the behaviour slightly to
 make it more Portal-friendly.
 
-$Id: File.py 40401 2005-11-29 07:45:24Z rafrombrc $
+$Id: File.py 70021 2006-09-07 10:16:08Z jens $
 """
 
 from Globals import InitializeClass
@@ -26,6 +26,8 @@
 from permissions import View
 from permissions import ModifyPortalContent
 
+from zope.interface import implements
+from Products.GenericSetup.interfaces import IDAVAware
 
 factory_type_information = (
   { 'id'             : 'File'
@@ -110,6 +112,7 @@
         A Portal-managed File
     """
 
+    implements(IDAVAware)
     __implements__ = ( PortalContent.__implements__
                      , DefaultDublinCoreImpl.__implements__
                      )

Modified: zope-cmf1.6/trunk/CMFDefault/Image.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/Image.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/Image.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/Image.py Mon Aug  6 21:16:42 2007
@@ -13,7 +13,7 @@
 """ This module implements a portal-managed Image class. It is based on
 Zope's built-in Image object.
 
-$Id: Image.py 40401 2005-11-29 07:45:24Z rafrombrc $
+$Id: Image.py 70021 2006-09-07 10:16:08Z jens $
 """
 
 from Globals import InitializeClass
@@ -24,6 +24,9 @@
 from DublinCore import DefaultDublinCoreImpl
 from permissions import View
 from permissions import ModifyPortalContent
+
+from zope.interface import implements
+from Products.GenericSetup.interfaces import IDAVAware
 
 factory_type_information = (
   { 'id'             : 'Image'
@@ -102,6 +105,7 @@
         A Portal-managed Image
     """
 
+    implements(IDAVAware)
     __implements__ = ( PortalContent.__implements__
                      , DefaultDublinCoreImpl.__implements__
                      )

Modified: zope-cmf1.6/trunk/CMFDefault/Link.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/Link.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/Link.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/Link.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Link instances represent explicit links-as-content.
 
-$Id: Link.py 40364 2005-11-24 18:23:00Z yuppie $
+$Id: Link.py 70021 2006-09-07 10:16:08Z jens $
 """
 
 import urlparse
@@ -37,6 +37,9 @@
 from utils import _dtmldir
 from utils import formatRFC822Headers
 from utils import parseHeadersBody
+
+from zope.interface import implements
+from Products.GenericSetup.interfaces import IDAVAware
 
 factory_type_information = (
   { 'id'             : 'Link'
@@ -90,6 +93,7 @@
         A Link
     """
 
+    implements(IDAVAware)
     __implements__ = ( PortalContent.__implements__
                      , DefaultDublinCoreImpl.__implements__
                      )

Modified: zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ CMFDefault portal_registration tool.
 
-$Id: RegistrationTool.py 41665 2006-02-18 14:34:20Z jens $
+$Id: RegistrationTool.py 73953 2007-03-31 13:47:07Z alecm $
 """
 import re
 
@@ -21,6 +21,7 @@
 
 from Products.CMFCore.utils import _checkPermission
 from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import postonly
 from Products.CMFCore.ActionInformation import ActionInformation
 from Products.CMFCore.Expression import Expression
 from Products.CMFCore.ActionProviderBase import ActionProviderBase
@@ -199,6 +200,7 @@
                   , password=None
                   , roles=None
                   , domains=None
+                  , REQUEST = None
                   ):
         """ Edit a user's properties and security settings
 
@@ -212,6 +214,7 @@
         member.setSecurityProfile(password,roles,domains)
 
         return member
+    editMember = postonly(editMember)
 
 InitializeClass(RegistrationTool)
 

Modified: zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py Mon Aug  6 21:16:42 2007
@@ -9,7 +9,7 @@
                                context.REQUEST,
                                error=failMessage)
 member = mt.getAuthenticatedMember()
-mt.setPassword(password, domains)
+mt.setPassword(password, domains, REQUEST=context.REQUEST)
 mt.credentialsChanged(password)
 return context.personalize_form(context,
                                 context.REQUEST,

Modified: zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py Mon Aug  6 21:16:42 2007
@@ -8,10 +8,12 @@
     pm.setLocalRoles( obj=context
                     , member_ids=context.REQUEST.get('member_ids', ())
                     , member_role=context.REQUEST.get('member_role', '')
+                    , REQUEST=context.REQUEST
                     )
 else:
     pm.deleteLocalRoles( obj=context
                        , member_ids=context.REQUEST.get('member_ids', ())
+                       , REQUEST=context.REQUEST
                        )
 
 qst='?portal_status_message=Local+Roles+changed.'

Modified: zope-cmf1.6/trunk/CMFDefault/skins/control/register.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/control/register.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/control/register.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/control/register.py Mon Aug  6 21:16:42 2007
@@ -18,7 +18,7 @@
     return context.join_form( context, REQUEST, error=failMessage )
 else:
     password=REQUEST.get('password') or portal_registration.generatePassword()
-    portal_registration.addMember(REQUEST['username'], password, properties=REQUEST)
+    portal_registration.addMember(REQUEST['username'], password, properties=REQUEST, REQUEST=REQUEST)
 
     if portal_properties.validate_email or REQUEST.get('mail_me', 0):
         portal_registration.registeredNotify(REQUEST['username'])

Modified: zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py Mon Aug  6 21:16:42 2007
@@ -9,7 +9,7 @@
                                context.REQUEST,
                                error=failMessage)
 member = mt.getAuthenticatedMember()
-mt.setPassword(password, domains)
+mt.setPassword(password, domains, REQUEST=context.REQUEST)
 mt.credentialsChanged(password)
 return context.personalize_form(context,
                                 context.REQUEST,

Modified: zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py Mon Aug  6 21:16:42 2007
@@ -7,10 +7,12 @@
     pm.setLocalRoles( obj=context
                     , member_ids=context.REQUEST.get('member_ids', ())
                     , member_role=context.REQUEST.get('member_role', '')
+                    , REQUEST=context.REQUEST
                     )
 else:
     pm.deleteLocalRoles( obj=context
                        , member_ids=context.REQUEST.get('member_ids', ())
+                       , REQUEST=context.REQUEST
                        )
 
 qst='?portal_status_message=Local+Roles+changed.'

Modified: zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py Mon Aug  6 21:16:42 2007
@@ -11,7 +11,8 @@
 try:
     rtool.addMember( id=member_id, password=password,
                      properties={'username': member_id,
-                                 'email': member_email} )
+                                 'email': member_email},
+                     REQUEST=context.REQUEST)
 except ValueError, errmsg:
     return context.setStatus(False, errmsg)
 else:

Modified: zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py Mon Aug  6 21:16:42 2007
@@ -5,7 +5,7 @@
 
 mtool = getToolByName(script, 'portal_membership')
 
-mtool.deleteMembers(ids)
+mtool.deleteMembers(ids,REQUEST=context.REQUEST)
 
 return context.setStatus( True, 'Selected member%s deleted.' %
                                 ( len(ids) != 1 and 's' or '' ) )

Modified: zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Unit tests for DublinCore module.
 
-$Id: test_DublinCore.py 38418 2005-09-09 08:40:13Z yuppie $
+$Id: test_DublinCore.py 74056 2007-04-09 19:37:51Z tseaver $
 """
 
 from unittest import TestSuite, makeSuite, main
@@ -207,6 +207,35 @@
             new_DC = getattr(item, dc_methodname)()
             self.assertEqual(orig_DC, new_DC)
 
+    def test_Date_with_explicit_timezone(self):
+        item = self._makeDummyContent('item')
+        item.effective_date = DateTime('2007-01-01T12:00:00Z')
+        self.assertEqual(item.Date('US/Eastern'),
+                         '2007-01-01 07:00:00')
+
+    def test_CreationDate_with_explicit_timezone(self):
+        item = self._makeDummyContent('item')
+        item.creation_date = DateTime('2007-01-01T12:00:00Z')
+        self.assertEqual(item.CreationDate('US/Eastern'),
+                         '2007-01-01 07:00:00')
+
+    def test_ModificationDate_with_explicit_timezone(self):
+        item = self._makeDummyContent('item')
+        item.modification_date = DateTime('2007-01-01T12:00:00Z')
+        self.assertEqual(item.ModificationDate('US/Eastern'),
+                         '2007-01-01 07:00:00')
+
+    def test_EffectiveDate_with_explicit_timezone(self):
+        item = self._makeDummyContent('item')
+        item.effective_date = DateTime('2007-01-01T12:00:00Z')
+        self.assertEqual(item.EffectiveDate('US/Eastern'),
+                         '2007-01-01 07:00:00')
+
+    def test_ExpirationDate_with_explicit_timezone(self):
+        item = self._makeDummyContent('item')
+        item.expiration_date = DateTime('2007-01-01T12:00:00Z')
+        self.assertEqual(item.ExpirationDate('US/Eastern'),
+                         '2007-01-01 07:00:00')
 
 def test_suite():
     return TestSuite((

Modified: zope-cmf1.6/trunk/CMFDefault/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/version.txt (original)
+++ zope-cmf1.6/trunk/CMFDefault/version.txt Mon Aug  6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4

Modified: zope-cmf1.6/trunk/CMFSetup/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFSetup/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFSetup/version.txt (original)
+++ zope-cmf1.6/trunk/CMFSetup/version.txt Mon Aug  6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4

Modified: zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py (original)
+++ zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Unit tests for DateCriteria module.
 
-$Id: test_DateC.py 40346 2005-11-23 17:15:03Z yuppie $
+$Id: test_DateC.py 74721 2007-04-24 20:25:01Z tseaver $
 """
 
 import unittest
@@ -190,6 +190,10 @@
             dummy_ob = getattr(self.site, dummy_id)
             dummy_ob.modified_date = self.now + i
             dummy_ob.reindexObject()
+
+    def tearDown(self):
+        RequestTest.tearDown(self)
+        PlacelessSetup.tearDown(self)
 
 
     def test_Harness(self):

Modified: zope-cmf1.6/trunk/CMFTopic/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFTopic/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFTopic/version.txt (original)
+++ zope-cmf1.6/trunk/CMFTopic/version.txt Mon Aug  6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4

Modified: zope-cmf1.6/trunk/CMFUid/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFUid/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFUid/version.txt (original)
+++ zope-cmf1.6/trunk/CMFUid/version.txt Mon Aug  6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4

Modified: zope-cmf1.6/trunk/DCWorkflow/States.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/States.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/States.py (original)
+++ zope-cmf1.6/trunk/DCWorkflow/States.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ States in a web-configurable workflow.
 
-$Id: States.py 36910 2005-04-07 16:37:47Z yuppie $
+$Id: States.py 73952 2007-03-31 13:45:25Z alecm $
 """
 
 from AccessControl import ClassSecurityInfo
@@ -27,6 +27,7 @@
 from ContainerTab import ContainerTab
 from permissions import ManagePortal
 from utils import _dtmldir
+from Products.CMFCore.utils import postonly
 
 
 class StateDefinition(SimpleItem):
@@ -213,8 +214,9 @@
                 roles = tuple(roles)
             pr[p] = roles
         return self.manage_permissions(REQUEST, 'Permissions changed.')
-
-    def setPermission(self, permission, acquired, roles):
+    setPermissions = postonly(setPermissions)
+
+    def setPermission(self, permission, acquired, roles, REQUEST=None):
         """Set a permission for this State."""
         pr = self.permission_roles
         if pr is None:
@@ -224,6 +226,7 @@
         else:
             roles = tuple(roles)
         pr[permission] = roles
+    setPermission = postonly(setPermission)
 
     manage_groups = PageTemplateFile('state_groups.pt', _dtmldir)
 
@@ -247,6 +250,7 @@
             RESPONSE.redirect(
                 "%s/manage_groups?manage_tabs_message=Groups+changed."
                 % self.absolute_url())
+    setGroups = postonly(setGroups)
 
 InitializeClass(StateDefinition)
 

Modified: zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py (original)
+++ zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Web-configurable workflow UI.
 
-$Id: WorkflowUIMixin.py 36457 2004-08-12 15:07:44Z jens $
+$Id: WorkflowUIMixin.py 73952 2007-03-31 13:45:25Z alecm $
 """
 
 import os
@@ -27,6 +27,7 @@
 from permissions import ManagePortal
 from Guard import Guard
 from utils import _dtmldir
+from Products.CMFCore.utils import postonly
 
 try:
     #
@@ -66,6 +67,7 @@
         if REQUEST is not None:
             return self.manage_properties(
                 REQUEST, manage_tabs_message='Properties changed.')
+    setProperties = postonly(setProperties)
 
     _permissions_form = DTMLFile('workflow_permissions', _dtmldir)
 
@@ -90,6 +92,7 @@
         if REQUEST is not None:
             return self.manage_permissions(
                 REQUEST, manage_tabs_message='Permission added.')
+    addManagedPermission = postonly(addManagedPermission)
 
     security.declareProtected(ManagePortal, 'delManagedPermissions')
     def delManagedPermissions(self, ps, REQUEST=None):
@@ -103,6 +106,7 @@
         if REQUEST is not None:
             return self.manage_permissions(
                 REQUEST, manage_tabs_message='Permission(s) removed.')
+    delManagedPermissions = postonly(delManagedPermissions)
 
     security.declareProtected(ManagePortal, 'getPossiblePermissions')
     def getPossiblePermissions(self):
@@ -132,7 +136,7 @@
             return [g['id'] for g in groups]
 
     security.declareProtected(ManagePortal, 'addGroup')
-    def addGroup(self, group, RESPONSE=None):
+    def addGroup(self, group, RESPONSE=None, REQUEST=None):
         """Adds a group by name.
         """
         if group not in self.getAvailableGroups():
@@ -142,9 +146,10 @@
             RESPONSE.redirect(
                 "%s/manage_groups?manage_tabs_message=Added+group."
                 % self.absolute_url())
+    addGroup = postonly(addGroup)
 
     security.declareProtected(ManagePortal, 'delGroups')
-    def delGroups(self, groups, RESPONSE=None):
+    def delGroups(self, groups, RESPONSE=None, REQUEST=None):
         """Removes groups by name.
         """
         self.groups = tuple([g for g in self.groups if g not in groups])
@@ -152,6 +157,7 @@
             RESPONSE.redirect(
                 "%s/manage_groups?manage_tabs_message=Groups+removed."
                 % self.absolute_url())
+    delGroups = postonly(delGroups)
 
     security.declareProtected(ManagePortal, 'getAvailableRoles')
     def getAvailableRoles(self):
@@ -179,7 +185,7 @@
         return self.valid_roles()
 
     security.declareProtected(ManagePortal, 'setRoles')
-    def setRoles(self, roles, RESPONSE=None):
+    def setRoles(self, roles, RESPONSE=None, REQUEST=None):
         """Changes the list of roles mapped to groups by this workflow.
         """
         avail = self.getAvailableRoles()
@@ -191,6 +197,7 @@
             RESPONSE.redirect(
                 "%s/manage_groups?manage_tabs_message=Roles+changed."
                 % self.absolute_url())
+    setRoles = postonly(setRoles)
 
     security.declareProtected(ManagePortal, 'getGuard')
     def getGuard(self):

Modified: zope-cmf1.6/trunk/DCWorkflow/exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/exportimport.py (original)
+++ zope-cmf1.6/trunk/DCWorkflow/exportimport.py Mon Aug  6 21:16:42 2007
@@ -12,12 +12,13 @@
 ##############################################################################
 """DCWorkflow export / import support.
 
-$Id: exportimport.py 68102 2006-05-12 06:05:10Z rafrombrc $
+$Id: exportimport.py 69757 2006-08-24 05:00:14Z alecm $
 """
 
 import re
 from xml.dom.minidom import parseString
 
+from Expression import Expression
 from AccessControl import ClassSecurityInfo
 from Acquisition import Implicit
 from Globals import InitializeClass
@@ -1071,8 +1072,9 @@
                        , actbox_category = action[ 'category' ]
                        , props = props
                        )
-
-        t.var_exprs = PersistentMapping( t_info[ 'variables' ].items() )
+        var_mapping = [(name, Expression(text)) for name, text in
+                       t_info[ 'variables' ].items()]
+        t.var_exprs = PersistentMapping(var_mapping)
 
 def _initDCWorkflowWorklists( workflow, worklists ):
 

Modified: zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py (original)
+++ zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """DCWorkflow export / import unit tests.
 
-$Id: test_exportimport.py 68982 2006-07-05 17:11:59Z efge $
+$Id: test_exportimport.py 69757 2006-08-24 05:00:14Z alecm $
 """
 
 import unittest
@@ -2278,7 +2278,7 @@
             self.assertEqual( len( var_exprs ), len( expected[ 9 ] ) )
 
             for var_id, expr in var_exprs.items():
-                self.assertEqual( expr, expected[ 9 ][ var_id ] )
+                self.assertEqual( expr.text, expected[ 9 ][ var_id ] )
 
             guard = transition.getGuard()
 

Modified: zope-cmf1.6/trunk/DCWorkflow/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/version.txt (original)
+++ zope-cmf1.6/trunk/DCWorkflow/version.txt Mon Aug  6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4

Modified: zope-cmf1.6/trunk/EXTERNALS.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/EXTERNALS.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/EXTERNALS.txt (original)
+++ zope-cmf1.6/trunk/EXTERNALS.txt Mon Aug  6 21:16:42 2007
@@ -5,4 +5,4 @@
 #
 # svn propset svn:externals -F ./EXTERNALS.TXT .
 #
-GenericSetup svn://svn.zope.org/repos/main/GenericSetup/tags/CMF-1.6.1-final
+GenericSetup svn://svn.zope.org/repos/main/GenericSetup/tags/1.2

Modified: zope-cmf1.6/trunk/GenericSetup/CHANGES.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/CHANGES.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/CHANGES.txt (original)
+++ zope-cmf1.6/trunk/GenericSetup/CHANGES.txt Mon Aug  6 21:16:42 2007
@@ -1,6 +1,23 @@
 GenericSetup Product Changelog
 
-  GenericSetup 1.2 (unreleased)
+  GenericSetup 1.2 (2007-04-24)
+
+    - ZCatalog handler: Fixed 'remove' behavior.
+      If the index doesn't exist, removing no longer raises an error.
+
+    - utils: Fixed XMLAdapterBase.
+      Exporting the XML body worked only once per instance.
+
+    - No longer read the toolset xml and update the toolset registry on
+      import context change.  Doing this only during the toolset step import
+      should be sufficient.
+
+  GenericSetup 1.2-beta (2006/09/20)
+
+    - tool:  Added support for uploading a tarball on the "Import" tab
+      (i.e., one produced on the export tab).
+
+    - docs: Added SampleSite demo product.
 
     - ProfileRegistry: Added 'registerProfile' ZCML directive.
       Using the old registerProfile method in initialize() is now deprecated.

Modified: zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """OFSP export / import support.
 
-$Id: exportimport.py 40715 2005-12-12 10:33:40Z yuppie $
+$Id: exportimport.py 68593 2006-06-12 07:48:32Z yuppie $
 """
 
 from Products.GenericSetup.utils import XMLAdapterBase
@@ -57,8 +57,9 @@
     def _exportBody(self):
         """Export the object as a file body.
         """
-        if self.context.meta_type == 'Folder':
-            return XMLAdapterBase._exportBody(self)
-        return None
+        if not self.context.meta_type in ('Folder', 'Folder (Ordered)'):
+            return None
+
+        return XMLAdapterBase._exportBody(self)
 
     body = property(_exportBody, XMLAdapterBase._importBody)

Modified: zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ZCatalog export / import support.
 
-$Id: exportimport.py 66608 2006-04-06 19:11:09Z yuppie $
+$Id: exportimport.py 74050 2007-04-09 16:07:34Z yuppie $
 """
 
 from zope.component import queryMultiAdapter
@@ -94,7 +94,11 @@
 
             idx_id = str(child.getAttribute('name'))
             if child.hasAttribute('remove'):
-                zcatalog.delIndex(idx_id)
+                # Remove index if it is there; then continue to the next
+                # index.  Removing a non existing index should not cause an
+                # error, so you can apply the profile twice without problems.
+                if idx_id in zcatalog.indexes():
+                    zcatalog.delIndex(idx_id)
                 continue
 
             if idx_id not in zcatalog.indexes():

Modified: zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ZCatalog export / import support unit tests.
 
-$Id: test_exportimport.py 68488 2006-06-04 17:22:57Z yuppie $
+$Id: test_exportimport.py 74050 2007-04-09 16:07:34Z yuppie $
 """
 
 import unittest
@@ -77,6 +77,7 @@
   <extra name="index_type" value="Okapi BM25 Rank"/>
   <extra name="lexicon_id" value="foo_plexicon"/>
  </index>
+ <index name="non_existing" remove="True"/>
 </object>
 """
 

Modified: zope-cmf1.6/trunk/GenericSetup/content.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/content.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/content.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/content.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """Filesystem exporter / importer adapters.
 
-$Id: content.py 66587 2006-04-06 10:47:06Z yuppie $
+$Id: content.py 70813 2006-10-19 15:46:15Z tseaver $
 """
 
 from csv import reader
@@ -104,10 +104,10 @@
             csv_writer.writerow((object_id, factory_name))
 
         export_context.writeDataFile('.objects',
-                                     text=stream.getvalue(),
-                                     content_type='text/comma-separated-values',
-                                     subdir=subdir,
-                                    )
+                                    text=stream.getvalue(),
+                                    content_type='text/comma-separated-values',
+                                    subdir=subdir,
+                                   )
 
         prop_adapter = IINIAware(context, None)
 

Modified: zope-cmf1.6/trunk/GenericSetup/context.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/context.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/context.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/context.py Mon Aug  6 21:16:42 2007
@@ -14,7 +14,7 @@
 
 Wrappers representing the state of an import / export operation.
 
-$Id: context.py 41502 2006-01-30 17:48:12Z efge $
+$Id: context.py 70813 2006-10-19 15:46:15Z tseaver $
 """
 
 import logging
@@ -285,8 +285,8 @@
 
     security = ClassSecurityInfo()
 
-    def __init__( self, tool, archive_bits, encoding=None, should_purge=False ):
-
+    def __init__( self, tool, archive_bits, encoding=None,
+                  should_purge=False ):
         BaseContext.__init__( self, tool, encoding )
         timestamp = time.gmtime()
         self._archive_stream = StringIO(archive_bits)

Modified: zope-cmf1.6/trunk/GenericSetup/interfaces.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/interfaces.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/interfaces.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/interfaces.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ GenericSetup product interfaces
 
-$Id: interfaces.py 67832 2006-05-02 12:51:17Z regebro $
+$Id: interfaces.py 70268 2006-09-20 21:07:49Z tseaver $
 """
 
 from zope.interface import Interface
@@ -453,6 +453,12 @@
         """ Get the ID of the active import context.
         """
 
+    def applyContext( context, encoding=None ):
+
+        """ Update the tool from the supplied context, without modifying its
+            "permanent" ID.
+        """
+
     def setImportContext( context_id ):
 
         """ Set the ID of the active import context and update the registries.

Modified: zope-cmf1.6/trunk/GenericSetup/tests/common.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/tests/common.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/tests/common.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/tests/common.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ GenericSetup product:  unit test utilities.
 
-$Id: common.py 68474 2006-06-03 12:07:11Z yuppie $
+$Id: common.py 69230 2006-07-21 10:44:38Z yuppie $
 """
 
 import os
@@ -54,11 +54,12 @@
         from AccessControl.SecurityManagement import newSecurityManager
         ZopeTestCase.setUp(self)
         try:
-            # BBB: for Zope 2.9
-            from Products.Five.traversable import FiveTraversable
-        except ImportError:
+            import zope.traversing
             zcml.load_config('meta.zcml', Products.Five)
             zcml.load_config('traversing.zcml', Products.Five)
+        except ImportError:
+            # BBB: for Zope 2.9
+            pass
         self.root = self.app
         newSecurityManager(None, OmnipotentUser().__of__(self.app.acl_users))
 

Modified: zope-cmf1.6/trunk/GenericSetup/tests/test_content.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/tests/test_content.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/tests/test_content.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/tests/test_content.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """Filesystem exporter / importer adapter unit tests.
 
-$Id: test_content.py 68488 2006-06-04 17:22:57Z yuppie $
+$Id: test_content.py 71043 2006-11-03 17:15:59Z yuppie $
 """
 
 import unittest
@@ -152,7 +152,10 @@
 
     def _setUpAdapters(self):
         from OFS.Folder import Folder
-        from zope.app.tests import ztapi
+        try:
+            from zope.app.testing import ztapi
+        except ImportError:  # BBB, Zope3 < 3.1
+            from zope.app.tests import ztapi
         #from OFS.Image import File
 
         from Products.GenericSetup.interfaces import IFilesystemExporter

Modified: zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Unit tests for GenericSetup tool.
 
-$Id: test_tool.py 65664 2006-03-01 06:41:14Z rafrombrc $
+$Id: test_tool.py 71275 2006-11-22 18:00:34Z alecm $
 """
 
 import unittest
@@ -175,7 +175,7 @@
         self.assertEqual( info[ 'version' ], '1' )
         self.failUnless( 'One small step' in info[ 'description' ] )
         self.assertEqual( info[ 'handler' ]
-                        , 'Products.GenericSetup.tests.test_registry.ONE_FUNC' )
+                        , 'Products.GenericSetup.tests.test_registry.ONE_FUNC')
 
         self.assertEqual( import_registry.getStep( 'one' ), ONE_FUNC )
 
@@ -187,20 +187,9 @@
         self.assertEqual( info[ 'title' ], 'One Step' )
         self.failUnless( 'One small step' in info[ 'description' ] )
         self.assertEqual( info[ 'handler' ]
-                        , 'Products.GenericSetup.tests.test_registry.ONE_FUNC' )
+                        , 'Products.GenericSetup.tests.test_registry.ONE_FUNC')
 
         self.assertEqual( export_registry.getStep( 'one' ), ONE_FUNC )
-
-        toolset = tool.getToolsetRegistry()
-        self.assertEqual( len( toolset.listForbiddenTools() ), 1 )
-        self.failUnless( 'doomed' in toolset.listForbiddenTools() )
-        self.assertEqual( len( toolset.listRequiredTools() ), 2 )
-        self.failUnless( 'mandatory' in toolset.listRequiredTools() )
-        info = toolset.getRequiredToolInfo( 'mandatory' )
-        self.assertEqual( info[ 'class' ], 'path.to.one' )
-        self.failUnless( 'obligatory' in toolset.listRequiredTools() )
-        info = toolset.getRequiredToolInfo( 'obligatory' )
-        self.assertEqual( info[ 'class' ], 'path.to.another' )
 
     def test_runImportStep_nonesuch( self ):
 
@@ -585,6 +574,54 @@
         self.assertEqual( info[ 'id' ], 'default' )
         self.assertEqual( info[ 'title' ], 'default' )
 
+    def test_applyContext(self):
+        from Products.GenericSetup.tool import IMPORT_STEPS_XML
+        from Products.GenericSetup.tool import EXPORT_STEPS_XML
+        from Products.GenericSetup.tool import TOOLSET_XML
+        from test_registry import _SINGLE_IMPORT_XML
+        from test_registry import _SINGLE_EXPORT_XML
+        from test_registry import _NORMAL_TOOLSET_XML
+        from test_registry import ONE_FUNC
+
+        site = self._makeSite()
+        tool = self._makeOne('setup_tool').__of__(site)
+        tool.getImportStepRegistry().clear()
+        tool.getExportStepRegistry().clear()
+        tool.getToolsetRegistry().clear()
+
+        context = DummyImportContext( site, tool=tool )
+        context._files[ IMPORT_STEPS_XML ] = _SINGLE_IMPORT_XML
+        context._files[ EXPORT_STEPS_XML ] = _SINGLE_EXPORT_XML
+        context._files[ TOOLSET_XML ] = _NORMAL_TOOLSET_XML
+
+        tool.applyContext(context)
+
+        import_registry = tool.getImportStepRegistry()
+        self.assertEqual( len( import_registry.listSteps() ), 1 )
+        self.failUnless( 'one' in import_registry.listSteps() )
+        info = import_registry.getStepMetadata( 'one' )
+
+        self.assertEqual( info[ 'id' ], 'one' )
+        self.assertEqual( info[ 'title' ], 'One Step' )
+        self.assertEqual( info[ 'version' ], '1' )
+        self.failUnless( 'One small step' in info[ 'description' ] )
+        self.assertEqual( info[ 'handler' ]
+                        , 'Products.GenericSetup.tests.test_registry.ONE_FUNC' )
+
+        self.assertEqual( import_registry.getStep( 'one' ), ONE_FUNC )
+
+        export_registry = tool.getExportStepRegistry()
+        self.assertEqual( len( export_registry.listSteps() ), 1 )
+        self.failUnless( 'one' in import_registry.listSteps() )
+        info = export_registry.getStepMetadata( 'one' )
+        self.assertEqual( info[ 'id' ], 'one' )
+        self.assertEqual( info[ 'title' ], 'One Step' )
+        self.failUnless( 'One small step' in info[ 'description' ] )
+        self.assertEqual( info[ 'handler' ]
+                        , 'Products.GenericSetup.tests.test_registry.ONE_FUNC' )
+
+        self.assertEqual( export_registry.getStep( 'one' ), ONE_FUNC )
+
 
 _DEFAULT_STEP_REGISTRIES_EXPORT_XML = """\
 <?xml version="1.0"?>
@@ -730,6 +767,40 @@
         self.assertEqual( content_type, 'text/xml' )
 
 class Test_importToolset( _ToolsetSetup ):
+
+    def test_import_updates_registry(self):
+        from Products.GenericSetup.tool import TOOLSET_XML
+        from Products.GenericSetup.tool import importToolset
+        from test_registry import _NORMAL_TOOLSET_XML
+
+        site = self._initSite()
+        context = DummyImportContext( site, tool=site.setup_tool )
+
+        # Import forbidden
+        context._files[ TOOLSET_XML ] = _FORBIDDEN_TOOLSET_XML
+        importToolset( context )
+
+        tool = context.getSetupTool()
+        toolset = tool.getToolsetRegistry()
+
+        self.assertEqual( len( toolset.listForbiddenTools() ), 3 )
+        self.failUnless( 'doomed' in toolset.listForbiddenTools() )
+        self.failUnless( 'damned' in toolset.listForbiddenTools() )
+        self.failUnless( 'blasted' in toolset.listForbiddenTools() )
+
+        # Import required
+        context._files[ TOOLSET_XML ] = _REQUIRED_TOOLSET_XML
+        importToolset( context )
+
+        self.assertEqual( len( toolset.listRequiredTools() ), 2 )
+        self.failUnless( 'mandatory' in toolset.listRequiredTools() )
+        info = toolset.getRequiredToolInfo( 'mandatory' )
+        self.assertEqual( info[ 'class' ],
+                          'Products.GenericSetup.tests.test_tool.DummyTool' )
+        self.failUnless( 'obligatory' in toolset.listRequiredTools() )
+        info = toolset.getRequiredToolInfo( 'obligatory' )
+        self.assertEqual( info[ 'class' ],
+                          'Products.GenericSetup.tests.test_tool.DummyTool' )
 
     def test_tool_ids( self ):
         # The tool import mechanism used to rely on the fact that all tools

Modified: zope-cmf1.6/trunk/GenericSetup/tool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/tool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/tool.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/tool.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Classes:  SetupTool
 
-$Id: tool.py 68512 2006-06-07 16:24:12Z yuppie $
+$Id: tool.py 71275 2006-11-22 18:00:34Z alecm $
 """
 
 import os
@@ -35,6 +35,7 @@
 from context import DirectoryImportContext
 from context import SnapshotImportContext
 from context import TarballExportContext
+from context import TarballImportContext
 from context import SnapshotExportContext
 from differ import ConfigDiff
 from registry import ImportStepRegistry
@@ -177,10 +178,14 @@
         """ See ISetupTool.
         """
         self._import_context_id = context_id
-
-        self._updateImportStepsRegistry(encoding)
-        self._updateExportStepsRegistry(encoding)
-        self._updateToolsetRegistry(encoding)
+        context = self._getImportContext(context_id)
+
+        self.applyContext(context, encoding)
+
+    security.declareProtected(ManagePortal, 'applyContext')
+    def applyContext(self, context, encoding=None):
+        self._updateImportStepsRegistry(context, encoding)
+        self._updateExportStepsRegistry(context, encoding)
 
     security.declareProtected(ManagePortal, 'getImportStepRegistry')
     def getImportStepRegistry(self):
@@ -244,18 +249,7 @@
 
         context = self._getImportContext(self._import_context_id, purge_old)
 
-        steps = self._import_registry.sortSteps()
-        messages = {}
-
-        for step in steps:
-            message = self._doRunImportStep(step, context)
-            message_list = filter(None, [message])
-            message_list.extend( ['%s: %s' % x[1:]
-                                  for x in context.listNotes()] )
-            messages[step] = '\n'.join(message_list)
-            context.clearNotes()
-
-        return { 'steps' : steps, 'messages' : messages }
+        return self._runImportStepsFromContext(context, purge_old=purge_old)
 
     security.declareProtected(ManagePortal, 'runExportStep')
     def runExportStep(self, step_id):
@@ -445,6 +439,29 @@
         return self.manage_importSteps(manage_tabs_message=steps_run,
                                        messages=result['messages'])
 
+    security.declareProtected(ManagePortal, 'manage_importTarball')
+    def manage_importTarball(self, tarball, RESPONSE, create_report=True):
+        """ Import steps from the uploaded tarball.
+        """
+        if getattr(tarball, 'read', None) is not None:
+            tarball = tarball.read()
+
+        context = TarballImportContext(tool=self,
+                                       archive_bits=tarball,
+                                       encoding='UTF8',
+                                       should_purge=True,
+                                      )
+        result = self._runImportStepsFromContext(context,
+                                                 purge_old=True)
+        steps_run = 'Steps run: %s' % ', '.join(result['steps'])
+
+        if create_report:
+            name = self._mangleTimestampName('import-all', 'log')
+            self._createReport(name, result['steps'], result['messages'])
+
+        return self.manage_importSteps(manage_tabs_message=steps_run,
+                                       messages=result['messages'])
+
     security.declareProtected(ManagePortal, 'manage_exportSteps')
     manage_exportSteps = PageTemplateFile('sutExportSteps', _wwwdir)
 
@@ -643,11 +660,12 @@
         return SnapshotImportContext(self, context_id, should_purge, encoding)
 
     security.declarePrivate('_updateImportStepsRegistry')
-    def _updateImportStepsRegistry(self, encoding):
+    def _updateImportStepsRegistry(self, context, encoding):
 
         """ Update our import steps registry from our profile.
         """
-        context = self._getImportContext(self._import_context_id)
+        if context is None:
+            context = self._getImportContext(self._import_context_id)
         xml = context.readDataFile(IMPORT_STEPS_XML)
         if xml is None:
             return
@@ -673,11 +691,12 @@
                                               )
 
     security.declarePrivate('_updateExportStepsRegistry')
-    def _updateExportStepsRegistry(self, encoding):
+    def _updateExportStepsRegistry(self, context, encoding):
 
         """ Update our export steps registry from our profile.
         """
-        context = self._getImportContext(self._import_context_id)
+        if context is None:
+            context = self._getImportContext(self._import_context_id)
         xml = context.readDataFile(EXPORT_STEPS_XML)
         if xml is None:
             return
@@ -698,18 +717,6 @@
                                                description=description,
                                               )
 
-    security.declarePrivate('_updateToolsetRegistry')
-    def _updateToolsetRegistry(self, encoding):
-
-        """ Update our toolset registry from our profile.
-        """
-        context = self._getImportContext(self._import_context_id)
-        xml = context.readDataFile(TOOLSET_XML)
-        if xml is None:
-            return
-
-        self._toolset_registry.parseXML(xml, encoding)
-
     security.declarePrivate('_doRunImportStep')
     def _doRunImportStep(self, step_id, context):
 
@@ -740,13 +747,30 @@
                 raise ValueError('Invalid export step: %s' % step_id)
 
             messages[step_id] = handler(context)
-
 
         return { 'steps' : steps
                , 'messages' : messages
                , 'tarball' : context.getArchive()
                , 'filename' : context.getArchiveFilename()
                }
+
+    security.declarePrivate('_runImportStepsFromContext')
+    def _runImportStepsFromContext(self, context, steps=None, purge_old=None):
+        self.applyContext(context)
+
+        if steps is None:
+            steps = self._import_registry.sortSteps()
+        messages = {}
+
+        for step in steps:
+            message = self._doRunImportStep(step, context)
+            message_list = filter(None, [message])
+            message_list.extend( ['%s: %s' % x[1:]
+                                  for x in context.listNotes()] )
+            messages[step] = '\n'.join(message_list)
+            context.clearNotes()
+
+        return { 'steps' : steps, 'messages' : messages }
 
     security.declarePrivate('_mangleTimestampName')
     def _mangleTimestampName(self, prefix, ext=None):

Modified: zope-cmf1.6/trunk/GenericSetup/utils.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/utils.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/utils.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/utils.py Mon Aug  6 21:16:42 2007
@@ -12,7 +12,7 @@
 ##############################################################################
 """ GenericSetup product utilities
 
-$Id: utils.py 67832 2006-05-02 12:51:17Z regebro $
+$Id: utils.py 74050 2007-04-09 16:07:34Z yuppie $
 """
 
 import os
@@ -46,6 +46,7 @@
 from interfaces import IBody
 from interfaces import INode
 from interfaces import ISetupContext
+from interfaces import ISetupTool
 from permissions import ManagePortal
 
 
@@ -461,6 +462,8 @@
     def _exportSimpleNode(self):
         """Export the object as a DOM node.
         """
+        if ISetupTool.providedBy(self.context):
+            return None
         return self._getObjectNode('object', False)
 
     def _importSimpleNode(self, node):
@@ -498,7 +501,9 @@
         """Export the object as a file body.
         """
         self._doc.appendChild(self._exportNode())
-        return self._doc.toprettyxml(' ')
+        xml = self._doc.toprettyxml(' ')
+        self._doc.unlink()
+        return xml
 
     def _importBody(self, body):
         """Import the object from the file body.
@@ -521,6 +526,7 @@
 
     filename = '' # for error reporting during import
 
+
 class ObjectManagerHelpers(object):
 
     """ObjectManager im- and export helpers.
@@ -535,11 +541,15 @@
         for obj in objects:
             exporter = queryMultiAdapter((obj, self.environ), INode)
             if exporter:
-                fragment.appendChild(exporter.node)
+                node = exporter.node
+                if node is not None:
+                    fragment.appendChild(exporter.node)
         return fragment
 
     def _purgeObjects(self):
-        for obj_id in self.context.objectIds():
+        for obj_id, obj in self.context.objectItems():
+            if ISetupTool.providedBy(obj):
+                continue
             self.context._delObject(obj_id)
 
     def _initObjects(self, node):

Modified: zope-cmf1.6/trunk/GenericSetup/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/version.txt (original)
+++ zope-cmf1.6/trunk/GenericSetup/version.txt Mon Aug  6 21:16:42 2007
@@ -1,1 +1,1 @@
-GenericSetup-1.1
+GenericSetup-1.2

Modified: zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt (original)
+++ zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt Mon Aug  6 21:16:42 2007
@@ -11,7 +11,7 @@
 
 <h3>Available Import Steps</h3>
 
-<form action="." method="POST"
+<form action="." method="POST" enctype="multipart/form-data"
       tal:attributes="action context/absolute_url" >
 <input type="hidden" name="ids:default:tokens" value="" />
 
@@ -70,6 +70,12 @@
     <input class="form-element" type="submit"
            name="manage_importAllSteps:method"
            value=" Import all steps " />
+      
+    <input class="form-element" type="file"
+           name="tarball" />
+    <input class="form-element" type="submit"
+           name="manage_importTarball:method"
+           value=" Import uploaded tarball " />
    </td>
   </tr>
  </tbody>

Modified: zope-cmf1.6/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/changelog?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/changelog (original)
+++ zope-cmf1.6/trunk/debian/changelog Mon Aug  6 21:16:42 2007
@@ -1,3 +1,15 @@
+zope-cmf1.6 (1.6.4-1) unstable; urgency=low
+
+  * New upstream release
+  * debian/watch:
+    - limiting to 1.6 versions of CMF
+  * debian/*.dzproduct:
+    - adding Zope 2.10 tp the supported versions
+  * debian/control:
+    - adding myself to Uploaders
+
+ -- Bernd Zeimetz <bernd at bzed.de>  Mon, 06 Aug 2007 22:10:52 +0200
+
 zope-cmf1.6 (1.6.2-1) unstable; urgency=low
 
   * New upstream release.

Modified: zope-cmf1.6/trunk/debian/control
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/control?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/control (original)
+++ zope-cmf1.6/trunk/debian/control Mon Aug  6 21:16:42 2007
@@ -2,7 +2,7 @@
 Section: web
 Priority: optional
 Maintainer: Debian/Ubuntu Zope Team <pkg-zope-developers at lists.alioth.debian.org>
-Uploaders: Fabio Tranchitella <kobold at debian.org>
+Uploaders: Fabio Tranchitella <kobold at debian.org>, Bernd Zeimetz <bernd at bzed.de>
 Build-Depends: debhelper (>= 5.0)
 Build-Depends-Indep: zope-debhelper (>= 0.3.2.15)
 Standards-Version: 3.7.2

Modified: zope-cmf1.6/trunk/debian/watch
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/watch?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/watch (original)
+++ zope-cmf1.6/trunk/debian/watch Mon Aug  6 21:16:42 2007
@@ -1,4 +1,4 @@
-# watch control file for uscan
 version=2
-# Site                                      Version Script
-http://www.zope.org/Products/CMF/.*CMF-([0-9a-z\.]*).*\.tar\.gz	debian uupdate
+
+http://www.zope.org/Products/CMF/.*CMF-(1\.6.[0-9a-z\.]*)-final\.tar\.gz debian uupdate
+

Modified: zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct Mon Aug  6 21:16:42 2007
@@ -2,4 +2,4 @@
 Package: zope-cmfactionicons1.6
 Directory: CMFActionIcons:1.6
 Depends: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8

Modified: zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct Mon Aug  6 21:16:42 2007
@@ -2,4 +2,4 @@
 Package: zope-cmfcalendar1.6
 Directory: CMFCalendar:1.6
 Depends: CMFCore:1.6, CMFDefault:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8

Modified: zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct Mon Aug  6 21:16:42 2007
@@ -1,4 +1,4 @@
 Name: CMFCore
 Package: zope-cmfcore1.6
 Directory: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8

Modified: zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct Mon Aug  6 21:16:42 2007
@@ -2,4 +2,4 @@
 Package: zope-cmfdefault1.6
 Directory: CMFDefault:1.6
 Depends: CMFCore:1.6, CMFTopic:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8

Modified: zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct Mon Aug  6 21:16:42 2007
@@ -2,4 +2,4 @@
 Package: zope-cmfsetup1.6
 Directory: CMFSetup:1.6
 Depends: CMFCore:1.6, CMFTopic:1.6, DCWorkflow:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8

Modified: zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct Mon Aug  6 21:16:42 2007
@@ -2,4 +2,4 @@
 Package: zope-cmftopic1.6
 Directory: CMFTopic:1.6
 Depends: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8

Modified: zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct Mon Aug  6 21:16:42 2007
@@ -2,4 +2,4 @@
 Package: zope-cmfuid1.6
 Directory: CMFUid:1.6
 Depends: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8

Modified: zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct Mon Aug  6 21:16:42 2007
@@ -2,4 +2,4 @@
 Package: zope-dcworkflow1.6
 Directory: DCWorkflow:1.6
 Depends: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8

Modified: zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct Mon Aug  6 21:16:42 2007
@@ -1,4 +1,4 @@
 Name: GenericSetup
 Package: zope-genericsetup
 Directory: GenericSetup
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8




More information about the pkg-zope-commits mailing list