CMF 1.5.5 (2005/11/20)

  Bug Fixes

    - DefaultWorkflowDefinition: Changed meta_type to make it unique.
      (http://www.zope.org/Collectors/CMF/298)

    - CMFSetup: fixed empty attribute parsing when an encoding is
      defined.

  Others

    - CMFCore: removed old backward compatibility code that slowed down
      TypeInformation.allowType and gave PortalFolder.allowedContentTypes
      quadratic complexity.

    - Removed deprecated 'all_cmf_tests.py' and supporting 'test_all.py'
      from products (use 'zopectl test' to run CMF tests instead).

CMF 1.5.5-beta (2005/11/06)

  Bug Fixes

    - CMFCore.DynamicType/ActionProviderBase: If an action cannot be looked
      up, provide a more helpful debugging message for the error log.

    - CMFCore.MemberDataTool: Fixed the pruneMemberData functionality in the
      ZMI: Now it is enough to press the button once.

    - Collector #381:  CMFCore unit tests depended on CMFDefault / workflow.

    - CalendarTool: If an event ends at exactly midnight, don't show it
      in the list of events for the day starting at midnight.
      (http://www.zope.org/Collectors/CMF/246)

  Features

    - CMFCore:  added 'skinname' to the thread-specific tuple created by
      the Skinnable base class to cache the skin path lookup, to facilitate
      querying later;  added a 'getCurrentSkinName' to the Skinnable API
      to do the query.  Thanks to Laurent Rowe for the patch.

    - CMFSetup: added support for importing and exporting workflow script
      metadata for scripts that are External Methods. One very important
      difference to other scripts remains: Since the CMFSetup machinery
      cannot access the filesystem code for external methods it only
      saves the data needed to instantiate the ZODBi-based External Method 
      object. If, during an import, the filesystem-based code cannot be
      found, the import will fail.

    - CMFActionIcons:  added support for exporting / importing
      action icons tool configuration (via GenericSetup).

    - CMFSetup:  added support for configuring content type registry.

    - CMFSetup:  added support for configuring caching policy manager.

    - CMFSetup:  added support for configuring cookie authentication and
      mailhost tools (http://www.zope.org/Collectors/CMF/387).

    - CMFCore.CachingPolicyManager: Caching policies can now control all the 
      Cache-Control tokens defined in the HTTP 1.1 spec (s-maxage, public, 
      private, no-transform).  When no-cache is enabled, a Pragma: no-cache 
      header is also sent for HTTP 1.0 clients. Thanks go to Geoff Davis
      for contributing the necessary patches.

    - CMFCore.FSPageTemplate:  These now have the option to return a status 
      304 and no content when a conditional GET is sent.  This is a potential 
      significant win for sites. This behavior is activated on the
      CachingPolicyManager by using policies that set suitable ETag headers
      when delivering the content. Geoff Davis invested the time to add
      this feature.

  Others

    - CMFDefault.Portal:  deprecated 'manage_addCMFSite'.

    - Collectors #384:  Added '__traceback_info__' to FSDTMLMethod's
      call-stack etnry.

    - Collector #383:  Added tab to 'portal_uidhandler' tool to allow
      querying objects given UID.

    - CMFCatalogAware: refactoring. Defines now 2 methods,
      _getCatalogTool() and _getWorkflowTool(), that are used to find
      the catalog and workflow tool. It's now possible to override
      these methods using inheritence for a given content type to
      specify another catalog or workflow tool the content type can
      use

    - CMFSetup: allow export of properties of old objects that were
      stored as lists (instead of tuples now).

CMF 1.5.4 (2005/09/04)

  Bug Fixes

    - CatalogTool: Made sure the catalog_object method works with Zope 2.8.
      The new 'pghandler' argument was missing. This broke at least the
      refreshCatalog method used by 'Update Catalog'.
      (http://www.zope.org/Collectors/CMF/379)

CMF 1.5.4-beta (2005/08/28)

  Bug Fixes

    - CMFCore.utils: The return value from _mergedLocalRoles allowed
      direct manipulation of objects' local role settings since it
      contained references to the actual values instead of copies.
      (http://www.zope.org/Collectors/CMF/376)

    - CMFTopic.DateCriteria: The behavior and naming of date criteria
      operators was very confusing and in many cases unexpected and 
      wrong. For that reason e.g. Plone replaced the implementation
      with a more user-friendly handling which is hereby introduced
      to CMF proper. (http://www.zope.org/Collectors/CMF/339)

    - CMFCore.PortalContent, CMFCore.FSSTXMethod, CMFTopic.Topic,
      CMFDefault.SkinnedFolder: Cache headers from the Caching Policy Manager
      never got set for DTML-based skins due to the way the view template
      __call__ method was invoked. (http://www.zope.org/Collectors/CMF/374)

    - CMFCore.FSImage and FSFile: Unlike the current behavior of Zope itself,
      FSImage and FSFile would set a content-length response header for 304
      (not modified) responses, which should not be done according to 
      RFC 2616. It won't do so anymore, but Zope itself will still force a
      content-length header in ZServer.HTTPResponse. This misbehavior
      has been filed as a Zope issue (http://www.zope.org/Collectors/Zope/1866).
      (http://www.zope.org/Collectors/CMF/372)

    - PortalFolder: Improved the _checkId method.
      Method Aliases mask objects with matching IDs. Thus _checkId() and
      checkIdAvailable() now make sure non-managers can't create objects with
      IDs already taken by Method Aliases of the current folder.

    - CMFDefault.Image and CMFDefault.File: When calling the constructor,
      any intelligent content type detection would be destroyed by the
      call to initialize Dublin Core values, which would overwrite the
      content_type. It is now preserved, if possible.
      (http://www.zope.org/Collectors/CMF/370)

  Features

    - CMFTopic.Topic: Made Topics a tad more useful by subclassing from
      CMFDefault.SkinnedFolder instead of CMFCore.PortalFolder, because
      SkinnedFolder is CatalogAware. Topics now offer useful information
      for Title, Description and SearchableText, so Topic objects can
      be located in the portal by using the standars search facilities.
      (http://www.zope.org/Collectors/CMF/53)

  Others

    - CMFCore.PortalFolder._checkId() allows root doted prefixed name
      object overrides.

CMF 1.5.3 (2005/08/07)

  Bugs fixed

    - When the CMFBTreeFolder was moved into CMFCore, its base class was
      changed to PortalFolderBase. This broke an assumption in the
      portal_syndication tool that relied on all syndication containers
      deriving from PortalFolder (http://www.zope.org/Collectors/CMF/369)

CMF 1.5.3-beta (2005/08/02)

  Bugs Fixed

    - Changed the INSTALL_SVN instructions to conform to the new branch
      and tag naming scheme instituted for the subversion repository.

    - Apply an interim fix for slow pathwalking implementation in
      development mode on Windows (http://www.zope.org/Collectors/CMF/367)
      Note that a better fix would be to leverage pywin32 APIs for
      file / directory monitoring.

    - FSObject.manage_doCustomize() was broken for folderish objects on Zope
      2.8 because manage_permission requires a context to work.
      (see http://www.zope.org/Collectors/CMF/368)
      
    - CMFCore/FSPropertiesObject and CMFCore/FSMetadata: Removed a wrongly 
      inserted DeprecationWarning in the FSPropertiesObject class and
      put it into the FSMetadata class. We are not deprecating ".props"
      files, but ".properties" and ".security".

    - Change CVS checkout documentation to their equivalent Subversion
      instructions

    - In CMFSetup, make sure to give special treatment to both CVS and 
      .svn folders where this is necessary (e.g. to implicitly skip them
      when importing profiles)

    - Made sure FSDVTest always deletes its temporary folder on tearDown.
      (http://www.zope.org/Collectors/CMF/106)

    - Fix DefaultWorkflowDefinition bug on isActionSupported() for the
      keywargs support to reflect DCWorkflowDefinition changes. Add a
      test case for this definition as well.

  Others

    - CMFCatalogAware: reindexObjectSecurity() now always reindexes the
      catalog objects without changing their catalog uid. This is useful
      for third-party code that indexes objects with special uids.

CMF 1.5.2 (2005/07/17)

  Bugs Fixed

    - CMFCore/ActionInformation.py: Permissions of action categories starting
      with 'document' are now evaluated in the object context instead of the
      portal context. This should probably be generalized some more.

    - Added testing framework to suppress / examine output from warnings
      module and from zLOG.

    - CMFUid/UniqueIdGeneratorTool.py: Replaced the old BTree.Length.Length
      implementation by a simple counter. Using a BTree.Length.Length object
      as counter may have caused setting the same unique id to multiple 
      objects under high load. The tools counter gets automigrated on the 
      first access.

  Others

    - CMFCore/CMFBTreeFolder.py:  Moved here from Zope core's
      Products/BTreeFolder2;  conditional import, with module alias, into
      __init__.py, for compatibility with Zope 2.7;  2.8.0 has BTreeFolder2
      in the core (see http://www.zope.org/Collectors/Zope/1813).

CMF 1.5.2beta2 (2005/07/08)

  Features Added

    - CMFDefault/skins/zpt_generic/talkback_tree:  Add link to allow
      managers to delete replies (http://www.zope.org/Collectors/CMF/38).

  Bugs Fixed

    - CMFDefault.utils.parseHeadersBody:  use standard library's 'rfc822'
      module to parse metadata headers, to take advantage of better handling
      of edge cases.

    - CMFDefault.utils.formatRFC822Headers:  strip trailing blank line
      of multi-line value, to prevent premature halt of parsing.
      (http://www.zope.org/Collectors/CMF/230)

    - CMFCore.MembershipTool:  allow 'getMemberById' to crawl up the
      hierarchy of user folders until it finds the user.  This means that
      users from any user folder in or above the portal will be treated
      as full members of the portal.
      (http://www.zope.org/Collectors/CMF/354, also
       http://www.zope.org/Collectors/CMF/63)

    - CatalogTool: Added manage_convertIndexes.
      This method should not be used with Zope 2.7. It overrides the broken
      manage_convertIndexes of Zope 2.8.0.
      (http://www.zope.org/Collectors/CMF/357)

    - CMFCore.WorkflowTool:  Make (deprecated) WorkflowInformation objects
      schema-compatible with current ActionInformation.
      (http://www.zope.org/Collectors/CMF/355)

    - CMFCore.utils.ToolInit: For icon registration to work with ToolInit
      you would have to have the same product_name parameter as the actual
      product name of the product. product_name is now optional, defaulting 
      to the real product name. It is also deprecated, and starting with 
      CMF1.6 product_name it will be ignored.

    - CMFSetup.workflow: scripts were not exported, they're now in a
      'scripts' subdirectory, and encoding was not propagated at import
      time.

  Others

    - Moved tests which used to 'import Zope' to try 'import Zope2'
      (with a fallback for Zope 2.7).  Thanks to sacco for the patch!
      (http://www.zope.org/Collectors/CMF/362)

    - CatalogTool: Removed obsolete Vocabulary.

CMF 1.5.2beta (2005/06/26)

  New Features

    - CMFDefault browser: Added browser package and five_template.
      This allows to use the main_template for forms generated by Five.

    - CMFDefault skins: Added style_slot to main_template.

    - CMFCore.PortalFolder: A new class PortalFolderBase was added. The
      class is a subclass of Folder while PortalFolder is a subclass of
      PortalFolderBase and OrderedFolder. It was added for software which
      is incompatible w/ the ordered interface.

    - CMFCore.ActionProviderBase: Add the methods _getOAI and _getExprContext
      which can be used to hook in custom version of getOAI() and
      getExprContext().

    - CMFCore.TypesTool.TypeInformation.queryMethodID(): Add new argument
      context=None and change all calls of queryMethodID to apply the context.

    - Interfaces: Added newstyle (Zope 3) interfaces.
      This change has no effect on Zope 2.7 without Five.

    - CMFSetup.skins: Small featurelet that adds a new keyword to the
      "layer" tag in skins.xml named "remove". If "remove" is
      specified, the named layer will be explicitly removed from the 
      skins path(s).

    - CMFCatalogAware: reindexObjectSecurity() now supports an
      optional argument 'skip_self' that prevents the object itself
      from being reindexed, but its descendants still are. Allows an
      optimization when you want to reindex all the idxs *and* the
      security in a single shot with reindexObject().

    - CMFCatalogAware: allow easy subclassing of the "security indexes"
      that are reindexed by reindexObjectSecurity(), through the
      attribute _cmf_security_indexes.

    - doActionFor() propagates **kw to isActionSupported() through
      _checkTransitionGuard() until the guard.check() method so that
      StateChangeInfo() can be constructed with those kwargs.

  Bug Fixes

    - ActionInfo: Make 'setActionExpression' sane if passed a string
      which is already prefixed with "string;".

    - ActionInfo: Fixed copy method.

    - CMFTopic.Topic/CMFCore.PortalContent: Clean up a previous change
      by changing __call__ methods to be aligned with what's on CVS
      HEAD and using the old _getViewFor function as a fallback to
      retain backwards compatibility.

    - DCWorkflow: Add a note to the Transitions and States forms
      explaining that the renaming actions will not automatically
      update any items in the workflow that might be affected by
      the change. (http://www.zope.org/Collectors/CMF/89)

    - CMFDefault.SyndicationTool: Zope 2.8 raises AttributeError where
      earlier Zopes used to raise KeyError.

    - Set cache headers in 304 responses from FSImage / FSFile
      (http://www.zope.org/Collectors/CMF/355)

    - CMFCore.DirectoryView: Do not cause ZODB writes or ConflictError
      if an old DirectoryView with a non-existing path is left. Sends a
      warning to stderr about those.
      (http://www.zope.org/Collectors/CMF/347)

    - CMFSetup utils: Fixed handling of comments and empty descriptions.
      (http://www.zope.org/Collectors/CMF/352)

    - CMFDefault.MetadataTool: When asked for a non-existing metadata
      policy, the tool would return the default policy unwrapped. This
      means, at a minimum, that the security declarations on the 
      MetadataElementPolicy instance would never be applied correctly.
      (http://www.zope.org/Collectors/CMF/342)

    - CMFSetup.workflow: Make sure to set the "permissions" attribute on
      DCWorkflow definitions to a tuple, which is expected throughout
      the DCWorkflow code. (http://www.zope.org/Collectors/CMF/346)

    - CMFCore.FSObject: Try to find and call the appropriate method to
      determine the skins tool name instead of hardcoding "portal_skins".
      (http://www.zope.org/Collectors/CMF/349)

    - CMFCore.FSZSQLMethod: Add the forgotten setting to allow simple 
      direct traversal for ZSQL methods to the list of settings recognized 
      and applied by FSZSQLMethods during instantiation and customization.
      (http://www.zope.org/Collectors/CMF/350)

    - CMFCore.FSObject: When customizing filesystem objects in the skins 
      tool, some security-related settings were not transferred to the 
      customized object, namely proxy roles and permission settings.
      (http://www.zope.org/Collectors/CMF/351)

    - Sync catalog metadata column with correct name of DublinCore string
      ExpirationDate method. (http://www.zope.org/Collectors/CMF/345)

  Others

    - CMFSetup: the import/export of portal types uses a new XML format
      that can hold arbitrary properties, to facilitate subclassing. The
      old format is still recognized when importing.

    - WorkflowTool: Marked WorkflowInformation and getActionsFor deprecated.
      getActionsFor is superseded by listActionInfos and WorkflowInformation
      was just used by getActionsFor.

CMF-1.5.1 (2005/04/24)

  Other

    - Made INSTALL.txt more general so it does not refer to specific CMF
      version numbers in the 1.5 series and thus won't look outdated from
      one release to the next.

    - CMFCatalogAware: reindexObjectSecurity() optimizations in case
      of an indexable container.

  Bug Fixes

    - CMFDefault.SyndicationTool: Coerce property values into correct
      types. (http://www.zope.org/Collectors/CMF/344)

    - CMFCore.Skinnable: Don't catch ConflictError in __of__.

    - CMFCore.CMFCatalogAware: In reindexObjectSecurity, use
      _unrestrictedGetObject when available, and LOG when the object
      cannot be retrieved.

CMF-1.5.1beta2 (2005/04/17)

  New Features

    - MemberDataTool: setSecurityProfile (called by MembershipTool's
      setPassword) now uses the userFolderEditUser() API of the user
      folder to change user information.

    - DCWorkflow: To bridge some of the bound variable name differences
      between TALES expressions used in DCWorkflow and those used elsewhere
      in the CMF, added two "aliases" to the expression context that reflect
      the CMF conventions: "object" points to "here", and "folder" points
      to "container" (http://www.zope.org/Collectors/CMF/338)

    - CMFSetup: Improved update directives for extension profiles.
      See the new PROFILES.txt for details.

    - CMFCore.DirectoryView: Made list of file names to ignore configurable.
      The previously hardcoded list of files to ignore when creating their
      ZODB representations can now be configured by passing a sequence of
      names to registerDirectory, which will be ignored in addition to the
      standard list of ignored names (http://www.zope.org/Collectors/CMF/319).

    - CMFCalendar: Added extension profile.
      You can now set up CMFCalendar in one step together with a new site or
      add calendar support to an existing site using the portal_setup tool.

    - CMFSetup: Added support for extension profiles.
      Extension profiles are profile fragments used to modify base profiles.
      They can be shipped with add-on products or used for customization
      steps. Importing an extension profile adds or overwrites existing
      settings in a fine-grained way. You can't export extension profiles.
      Snapshots and exports always represent the merged settings.

    - CMFSetup: Sometimes it is not necessary or desirable to create a 
      snapshot upon initial site creation. Matter of fact when run in a unit 
      test situation, addConfiguredSite can throw permission errors during the
      snapshot-taking because no specific SecurityManager has been set up.
      Add new flag "snapshot" to factory.addConfiguredSite to turn off
      snapshotting if desired

  Bug Fixes

    - TypesTool: Removed _checkViewType.
      The control-content-creating-by-typeinfo-view-permission feature did
      never work. Use DCWorkflow's allowCreate method instead.
      (http://www.zope.org/Collectors/CMF/114)

    - CMFDefault.DublinCore: Force local timezone when displaying date
      metadata. (http://www.zope.org/Collectors/CMF/325)

    - CMFCore.SkinsTool: Prevent adding skin layers with invalid path elements
      There is a disconnect between the ability to define what can be ignored
      inside DirectoryViews and what can be put into skins paths in
      the SkinsTool. Now a check is done inside addSkinSelection that makes 
      sure the same ignore-policy that is used for the DirectoryView is 
      applied to the elements of a skin path.
      (http://www.zope.org/Collectors/CMF/336)

    - CMFCore.FSZSQLMethod: Added configuration parameters that were left out.
      Some of the configuration parameters to ZSQL methods, specifically 
      those describing custom pluggable brains classes and the
      connection_hook, were not implemented in FSZSQLMethod. Also added a 
      first small unittest module for FSZSQLMethod testing.
      (http://www.zope.org/Collectors/CMF/335)

    - CMFSetup utils: Modified ConfiguratorBase.
      If the DEFAULT value is used, CONVERTER is no longer called. This makes
      setting DEFAULT more intuitive. While very unlikely, the change might
      break existing third party configurators.

    - CMFSetup: Reduced probability of profile ID conflicts.
      The first argument of 'registerProfile' is now 'name' instead of
      'profile_id'. The profile ID combines 'name' and 'product'.

    - CMFSetup.skins made the assumption that the CMF site can always
      acquire REQUEST and would set up the current skin with it. Added a test
      to see if REQUEST is available and if it is not, skip the step that
      sets up the current skin.

    - CMFCalendar zpt skin: Removed dependency on dtml layer.

    - CMFCalendar: Modified install script.
      Adds date indexes instead of field indexes. No longer adds the dtml
      layer to zpt skins.

    - CMFCore.utils: Added 'transaction' for backwards compatibility.
      CMF now uses the Zope 2.8 transaction API und uses utils.transaction as
      fallback in Zope 2.7.

    - CMFCore.TypesTool: Added backwards compatibility code to the fix for
      collector issue 49. (http://www.zope.org/Collectors/CMF/49)

    - CMFCore.Skinnable: Changed the way layers (skindata) are stored
      (no more _v_ attribute) to prevent them being lost in the middle
      of a request when memory pressure is high. This change is
      incompatible with SpeedPack, but includes one of its two
      optimizations about skins. (http://www.zope.org/Collectors/CMF/198)

    - DublinCore: Fixed creators upgrade to not call a potentially
      costly method on the user folder.
      (http://www.zope.org/Collectors/CMF/300)

    - CMFCatalogAware: When reindexing security, all subobjects must be
      reindexed even if they are not visible by the current user. Also
      fixed to work correctly with Zope >= 2.7.6.

CMF 1.5.1beta (2005/03/24)

  New Features

    - CMFCore.TypesTool and CMFCore.PortalFolder: If invokeFactory is 
      called from code it will now hand back the created object's ID. This
      does not change any behavior when called directly from the web. Both
      methods returned None before, so there is no dependencies anywhere
      on their return values, anyway. (http://www.zope.org/Collectors/CMF/331)

    - CMFSetup: When importing skins configurations you can now specify a
      layer to be inserted after a given layer. Previously you could only
      insert before a given layer.

    - CatalogTool: All default FieldIndex instances used for indexing
      DateTime values are now created as DateIndex instances instead. All
      default TextIndex instances are now created as ZCTextIndex instances.
      (CMF collector issues http://www.zope.org/Collectors/CMF/191 and
      http://www.zope.org/Collectors/CMF/302)

    - CMFSetup: Improved 'skip purge' behavior of the skins import handler.
      If purging is disabled, it's now possible to modify existing skin
      configurations. You can use '*' as wildcard for skin-path ids and a
      'insert-before' attribute to specify where to insert a new layer.

    - CMFSetup tool: Improved 'Properties' tab.
      The active site configuration can now be selected from a list of
      registered profiles and stored snapshots.
      (http://www.zope.org/Collectors/CMF/264)

    - CMFSetup: Added handlers for site properties.

    - CMFSetup utils: Added 'ConfiguratorBase' class.
      It's now recommended to use this class as base for all configurators.
      The class includes some generic methods to handle subobjects and
      properties.

    - FSObject: Now FSObject-derived items like FSImage or FSFile can have 
      security declarations inside the metadata file.
      (http://www.zope.org/Collectors/CMF/289)

    - profiles: Moved 'default' profile to CMFDefault.
      Using the new 'importVarious' handler this profile now allows to create
      CMF sites identical to those created with manage_addCMFSite. 

    - CMFDefault: Added 'importVarious' setup handler.
      This provisional handler will be removed again as soon as full handlers
      are implemented for these steps.

    - CachePolicyManager: You can now set a ETag using a TALES expression
      (http://www.zope.org/Collectors/CMF/236) 

    - RegistrationTool: The regular expression that limits what people
      can put in as a valid member ID is now configurable TTW in the
      portal_registration tool (http://www.zope.org/Collectors/CMF/117)

  Bug Fixes
  
    - CMFCore.MembershipTool: Change a couple conditional tests that tried to
      determine if the MemberDataTool had been found to explicitly test for
      None as the return value instead of a truth test on the tool itself, which
      would fail unexpectedly on folderish MemberDataTool implementations 
      that don't have actual content (http://www.zope.org/Collectors/CMF/330)

    - CMFCore.CachingPolicyManager and CMFCore.ActionInformation: The names
      available to TALES expressions throughout the CMF showed some
      inconsistencies. To prevent confusion the names "content" and 
      "content_url" that were used for Cache Policy Manager policies as well
      as the special ActionInformation.oai class are now deprecated and will
      be removed in CMF 1.7. The canonical names to be used are "object" and
      "object_url", which matches all other CMF expression contexts with
      DCWorkflow being the only exception due to its non-CMF roots.
      (http://www.zope.org/Collectors/CMF/328)

    - CMFCore.PortalFolder: Cataloging portal folders was prevented by
      overriding the typical indexing calls, but one of them was forgotten,
      so they still got cataloged.  (http://www.zope.org/Collectors/CMF/309)

    - CMFCore.DirectoryView: A special __setattr__ on the
      DirectoryViewSurrogate class made sure to write changes through to the
      underlying DirectoryView, but there was no equivalent __delattr__
      cleanup. (http://www.zope.org/Collectors/CMF/316)

    - CMFDefault.RegistrationTool: Allow email addresses with an underscore
      as the last element of the alias part.
      (http://www.zope.org/Collectors/CMF/326)

    - FSPageTemplate: Ensure that if a content type is specified using a
      .metadata file we respect it (http://www.zope.org/Collectors/CMF/320)

    - CMFCore.tests.test_PortalFolder:  fixed testing bug copied forward
      from OFS.tests.testCopySupport.

    - CMFDefault.RegistrationTool: Allow '+' in e-mail addresses.
      (http://www.zope.org/Collectors/CMF/322)

    - ActionInfo: Fixed issue with oldstyle Action info mappings.
      The 'allowed' key was broken for non-empty 'permissions'.

    - CMFDefault.DiscussionTool: 'getDiscussionFor' sometimes returned
      unwrapped talkback objects.

    - CMFSite: Made 'title' and 'description' properties undeletable.
      This change has no effect on existing sites.

    - FSObject: Ensure that a cache manager association on a Filesystem-based
      object in the Skins Tool gets applied to the customized object in the
      ZODB upon customization. (http://www.zope.org/Collectors/CMF/304)

    - TypesTool: Changed the way available factory_type_informations are
      presented on the dropdown list when adding a new type from a 
      filesystem FTI to the Types Tool. The new representation includes
      the "id" as set in the FTI instead of just the product name and the
      meta_type. (http://www.zope.org/Collectors/CMF/49)

    - CMFSetup: Fixed import of workflow bindings.
      The 'workflow' import step has to be run after the 'typeinfo' step.
      (http://www.zope.org/Collectors/CMF/265)

    - CMFCore.CatalogTool: Take into account query restrictions on
      'effective' or 'expires' attributes during a search.
      (http://www.zope.org/Collectors/CMF/120)

    - WorkflowTool: Fixed 'setChainForPortalTypes'.
      If 'chain' was an empty string, it wasn't set correctly.

    - FSFile, FSImage: Made available to caching policy manager as
      standard content. (http://www.zope.org/Collectors/CMF/299)

    - FSDTMLMethod: Small code cleanup to remove duplicate variable
      definition (http://www.zope.org/Collectors/CMF/291)

    - Portal: Fixed 'setupDefaultProperties'.
      Backwards compatibility was broken and the 'default_charset' argument
      was ignored.

    - Document/NewsItem: If the "plain text" format is selected the
      content will no longer be tested for HTML and reduced to text
      between opening and closing "body" tags
      (http://www.zope.org/Collectors/CMF/214)

    - Document/NewsItem: A call to setFormat will now re-cook the
      document content if the format has been changed (arising from
      discussion about http://www.zope.org/Collectors/CMF/214)

    - DirectoryViews/FSMetadata: Corrected some erroneous docstrings
      about proxy role handling using .metadata files
      (http://www.zope.org/Collectors/CMF/177)

  Other

    - CMFCore.FSPropertiesObject: Added a deprecation warning to announce the
      fact that .properties files will disappear in CMF 1.7 and should be 
      replaced with CMFCore.FSMetadata (.metadata) files.

CMF 1.5.0 (2004/10/21)

  New Features

    - Portal: Added 'default_charset' property.
      (http://www.zope.org/Collectors/CMF/261)

    - CMFDefault utils: Added 'toUnicode' function.
      (http://www.zope.org/Collectors/CMF/261)

  Bug Fixes

    - ZPT skin: Fixed 'RSS'.
      Values are now converted to unicode, using 'default_charset'.
      (http://www.zope.org/Collectors/CMF/261)

    - DublinCore: Added 'setCreators' method.  Note that
      'notifyModified' also modifies creators. If the current user
      should not be added to creators, make sure notifyModified() is not
      called after setCreators().  (http://www.zope.org/Collectors/CMF/61)

    - ZPT skin: Fixed '*metadata_edit_form'.
      Setting "Enable Discussion?" to 'Off' was broken.

    - CMFSetup: Made sure imported values are converted to strings.
      For now imports and exports work only with 'ascii' encoding.
      (http://www.zope.org/Collectors/CMF/287)

    - FSPageTemplate: Don't hide sub-tracebacks in development mode.

    - TypesTool: Removed again the "add properties from the ZMI" feature.
      That feature existed only in 1.5.0beta2.

    - ActionProviderBase: Modified exceptions raised by 'getActionInfo'.
      Now Unauthorized is raised if at least one Action was found but
      the user is not allowed to access any of them.

    - RegistrationTool: Generated passwords no longer contain 'OQ0Il1'.

    - The permalink feature is now turned off by default and may be turned
      on by setting the boolean property 'enable_permalink' in the cmfs
      root property sheet through the ZMI. Through the 'get_permalink'
      script the permanent link of an content object can be asked for.
      Additionaly the site may be asked if the permalink feature is turned
      on or not by adding 'isAvailable' instead of an unique id
      (http://www.example.com/permalink/isAvailable). Returns '1' or '0'.
      Also removed the badly designed 'tal:on-error' directive in
      'main_template'.

CMF 1.5.0beta2 (2004/09/27)

  New Features

    - CookieCrumbler: Merged changes from standalone version.
      Cookies set on an HTTPS connection are now marked as secure, meaning
      they will not be transmitted over HTTP.

    - PortalFolder: New 'Folderish' Interface defines the 'content*'
      methods.

    - PortalFolder: Improved WebDAV folder listings.
      Hidden sub-objects like tools are now filtered out. To see all
      sub-objects, you need the 'Manage portal' permission.

    - TypesTool: New properties can be added from the ZMI to
      TypeInformation objects.

  Bug Fixes

    - CMFDefault/Document:  store / return size of "raw" source text for
      'get_size'.

    - ZPT skin: Refactored registered_notify_template.
      For security reasons, it no longer adds the password to the login URL.

    - PortalFolder: Fixed '_checkId' policy.
      In a subfolder, members without 'Manage portal' permission were not
      able to create content items whose names clashed with content items
      in the portal root.

    - CookieCrumbler: Improved 'came_from' URL.
      Problems in connection with stack manipulation on traversal or usage
      of 'traverse_subpath' should be fixed now.

    - PortalFolder: Public 'content*' methods or no longer publishable.
      This prevents expensive anonymous calls to contentItems(),
      contentIds() and contentValues() via URLs. They still can be used
      in TTW code.

    - ZPT skin: Added missing mail_password_template.

    - TypeInformation: Simplified Method Aliases API.
      The new queryMethodID() replaces getMethodPath() and getMethodURL().
      Aliases for method paths are no longer supported.

    - FSFile: Allow setting a content_type value using a .metadata file
      (http://www.zope.org/Collectors/CMF/281)

    - FSPageTemplate: Refine the XML content type detection so that
      addtional data such as encoding is preserved
      (http://www.zope.org/Collectors/CMF/228)

    - ActionInformation: If a path expression ending in an object that
      gets called using __render_with_namespace__ (such as DTML objects
      and Scripts (Python)) is used a KeyError for "here" would be thrown
      inside PageTemplates.ZRPythonExpr.call_with_ns. call_with_ns
      expects the namespace to contain "here", which the context coming
      from CMFCore.Expressions.createExprContext did not provide. Added
      "here" as an alias pointing to the provided "object"
      (http://www.zope.org/Collectors/CMF/171)

    - DiscussionItem: Made sure that the workflow is notified of their
      creation.
      (http://www.zope.org/Collectors/CMF/280)

    - CMFCatalogAware: When pasting a content item, local roles were not
      changed to reflect the new ownership.
      (http://www.zope.org/Collectors/CMF/205)

    - ZPT skin: Added missing RSS script and template.
      (http://www.zope.org/Collectors/CMF/279)

    - DirectoryView: Improved createDirectoryView() backwards compatibility.
      Using platform specific path separators is deprecated.

    - UniqueIdAnnotation: Fixed manage_after* methods.
      They didn't work correctly in nested folders.

    - Workflow: Marked WorkflowMethod alias WorkflowAction as deprecated.

    - ZPT skin: Improved folder_copy_control and folder_cut_control.
      They now catch CopyErrors.

    - DirectoryView: Readded expandpath() for backwards compatibility.
      Some products still import expandpath from DirectoryView because
      it was once defined there. Note that importing expandpath from
      DirectoryView is deprecated and doesn't work with CMF HEAD / 1.6.

    - RegistrationTool: An optional password can now be passed to
      registeredNotify() (Issue #277).

    - Tool icons can now reside in subdirectories (Issue #144).

CMF 1.5.0beta (2004/08/12)

  New Features

    - The CMF is now under the terms of version 2.1 of the Zope Public
      License (ZPL); it was previously under ZPL version 2.0.

    - TypeInfos: Marked getActionById as deprecated.
      Use getActionInfo if you need an URL or getMethodPath if you need a
      method.

    - CatalogTool.CatalogTool now has a private 'unrestrictedSearchResults'
      method bypassing the effective and expiry date and roles. The new
      method has to be used with care to not expose security holes in
      applications using the CatalogTool.

    - CMFCalendar.CalendarTool: Made workflow states configurable TTW.
      (http://www.zope.org/Collectors/CMF/110)

    - Minor featurelet: The "Action Providers" ZMI tab on the portal_actions
      tool now links directly to the tools shown
      (http://www.zope.org/Collectors/CMF/181)

    - CMFCore.utils: Introduced contributorsplitter() utility function
      along the lines of keywordsplitter().

    - Actions and Action providers: Further refactoring.

      o Removed again OldstyleActionProvider Interface and
        OldstyleActionProviderBase that existed only in 1.5.0-alpha.
        ActionProvider now also works with oldstyle Action mappings.

      o listActionInfos() and getActionInfo() now return ActionInfo objects
        instead of Action info mappings. ActionInfo objects have a backwards
        compatible mapping interface.

    - Added CMFUid product which provides tools for generating,
      registering, and storing unique IDs for content (gregweb).

      o As an example of how to use unique ids, enhanced CMFDefault.Favorite
        content class, using unique ids to track moved or renamed
        content items.

      o At the bottom of the page the permanent link to the content object
        is shown (http://www.example.com/<cmf_root>/permalink/1234, where
        1234 is the unique id of the content object)

    - Added __init__ method to the IOpaqueItems.ICallableOpaqueItem
      interface.

    - CookieCrumber now supports logging the authenticated user id to
      the access log just like basic auth.

    - 'portal_setup' tool can now disply / download diffs between profiles
      and / or snapshots.

    - The 'find' tab on the 'portal_skins' tool will now mark the object that
      would be returned when using the specified skin

  Bug Fixes

    - CMFCore.PortalFolder: Enforce check of "Delete objects" permission
      during cut + paste.
      (http://www.zope.org/Collectors/CMF/259)

      N.B.  This fix depends on an update to the underlying Zope software,
            e.g., Zope 2.7.3 or later.  Two new unit tests fail on
            Zope 2.7.2 and earlier.

    - CMFDefault.MetadataTool: Validation would disallow
      vocabulary-constrained metadata elements to be empty
      (http://www.zope.org/Collectors/CMF/217)

    - CMFDefault.DiscussionItem: Replies were not sorted chronologically
      (http://www.zope.org/Collectors/CMF/211)

    - CMFDefault.Image and CMFDefault.File: When copy/pasting Image and File
      objects the review state did not revert to "private".
      (http://www.zope.org/Collectors/CMF/176)

    - CMFSetup: Refactored rolemap.
      Converted the roles attribute to role sub-elements. Fixed an
      acquisition bug that caused incomplete exports. Updated default
      profile.

    - CMFWiki: Prevent deprecation notice for the deprecated
      CMFWikiPermissions module by replacing its usage in CMFWiki.__init__
      with the new permissions module.

    - CMFTopic: Change topic_view template to show title and ID (it only
      showed title before)
      (http://www.zope.org/Collectors/CMF/180)

    - CMFCore.PortalFolder: Unlike other content, only Managers were able
      to create PortalFolders using mkdir in FTP. Fixed by inserting
      missing security declaration for PortalFolder.manage_addFolder
      (http://www.zope.org/Collectors/CMF/167)

    - Default text format for NewsItems is now structured-text, just like
      it is for Documents, tuhs removing a spurious difference.
      (http://www.zope.org/Collectors/CMF/138)

    - CMFCalendar.CalendarTool: (Lost) fix for issues 65 and 159.
      The determination of the date/time range constituting a specific month
      was faulty.

    - CMFDefault.DublinCore: Use the portal_metadata tool's 'getPublisher'
      for the DublinCore 'Publisher' element (thanks to Eric Brown for the
      patch).

    - CMFCalendar.CalendarTool: Code assumed US datetime format throughout.
      At least since Zope 2.7 users can change that.

    - CMFCalendar.Event: Day, month, and year were processed in the wrong
      order by Event.edit().
      (http://www.zope.org/Collectors/CMF/202)

    - CMFCore.PortalFolder: _verifyObjectPaste() did not check the
      container's allowed content types, enabling users to paste objects
      they were not allowed to add.
      (http://www.zope.org/Collectors/CMF/216)

    - CMFDefault.File and CMFDefault.Image: setFormat() failed to update
      the content_type property causing index_html() to use a stale mimetype
      when serving the file or image.
      (http://www.zope.org/Collectors/CMF/226)

    - CMFDefault.Document, CMFDefault.Link, and CMFCalendar.Event:
      WebDAV PUT() caused improper splitting of 'Contributors' metadata
      header.

    - CMFCore.PortalFolder: Fixed missing import of BadRequest exception.

    - DCWorkflow DefaultWorkflowClassic: Fixed 'pending' state permissions.

    - CMFSetup: Refactored actions, type-infos and workflow definition.
      Changed some XML attributes. Converted list items and descriptions to
      sub-elements.

    - ActionInformation: Some attribute cleanup.
      Enforced usage of 'Title' instead of 'Name', 'URL' or
      'URL (Expression)' instead of 'Action'. Enforced boolean type of
      'Visible'.

    - DiscussionTool: Fixed two acquisition bugs.
      (Collector #119 and #201)

    - Change default CookieCrumbler Cache-Control header value from
      "no-cache" to "private" to allow browser caches to cache cookie
      authenticated pages but not proxies and HTTP accellerators.

    - ActionInformation: Correctly store an empty tuple for permissions
      if no permission is given (Collector #242).

    - DublinCore: Use a default ceiling date that is parsable by
      DateIndex (Collector #132).

    - RSS: Creates correct XML by always quoting arguments (Collector #170).

CMF 1.5.0alpha (2004/07/09)

  New Features

    - CMFActionIcons product is now shipped as part of the CMF release.

    - New portal_setup tool provides export / import of various site
      configuration choices, both as tarballs and as TTW "snapshots".
      See the "README":CMFSetup/README.txt.

    - zpt skin: Some forms are now scripts.
      These scripts are dispatchers that call validators and controllers and
      set redirect depending on the selected button. If redirect is not set,
      the script calls a template and returns the resulting HTML page.

    - ActionProviderBase, ActionInformation: Added methods to modify/edit
      actions. New method 'getActionObject' in 'ActionProviderBase' and
      'edit' method in 'ActionInformation' (Collector 195).
      An action now may be modified/edited the following way::

        action_provider.getActionObject('object/view').edit(title='VIEW')

    - Topic objects now support syndication (Collector #203).

    - PortalFolder and zpt skin: PortalFolder now inherits from
      OrderedFolder.

      o Added buttons to 'folder_contents' that allow to set a default
        sorting for each PortalFolder or to order the sub-objects by hand.

      o Modified 'index_html' to show sub-objects in the selected order. The
        old 'index_html' is still available as 'index_html_categorized'.

    - CMFDefault utils: Added 'html_marshal' function.
      This is similar to ZTUtils.make_hidden_input(), but returns a sequence
      of (name, value) pairs instead of html code.

    - CMFCore utils and content types: Marked _getViewFor as deprecated.
      __call__() and view() methods using _getViewFor() are deprecated as
      well. Use Method Aliases instead.

    - CMFDefault Site: Now adds the 'Classic' DCWorkflow on creation.
      If DCWorkflow is not installed, no default workflow is added.

    - DynamicType: Added 'getActionInfo' method.
      This is a shortcut to getActionInfo() of the related TypeInformation.

    - DublinCore: setModificationDate is now guarded by
      'ModifyPortalContent'.

    - zpt skin: Reimplemented 'folder_contents' and related controllers.
      Uses a dispatcher script that calls the right validators and
      controllers if a form button is pushed. The result looks almost
      the same as before.

    - PortalFolder and SkinnedFolder: Added 'new' and 'rename_items' Actions.
      Used for redirects they are invisible by default.

    - CMFCore exceptions: Added some Exceptions.
      AccessControl.Unauthorized is a subclass of zExceptions.Unauthorized,
      so for best results use 'AccessControl_Unauthorized' to raise
      Unauthorized and 'zExceptions_Unauthorized' to catch them all.
      'CopyError' and 'ResourceLockedError' are now also available for
      TTW code.  'EditingConflict' is a new CMF class replacing the old
      string exception.

    - Callable Opaque Items, CMFCatalogAware: Added an interface
      'ICallableOpaqueItemWithHooks'. CMF now calls the manage_after*
      and manage_before* hooks of a marked opaque item on copying,
      moving or deleting the containing content object.

    - DublinCore: Creator element no longer depends on Ownership.
      (Collector #25)

      o Added listCreators() and listContributors() to the DublinCore
        Interface. Creator() now returns the first element of listCreators().
        Contributors() is now a deprecated alias of listContributors() and
        might change in a future version.

      o Updated DublinCore implementation in DefaultDublinCoreImpl and
        DiscussionItem. Added new addCreator() method that is called by
        notifyModified(). SkinnedFolder also uses the new methods.

      o Updated ContentFilter to work with listCreators().

      o Updated CatalogTool to index listCreators. Creator index and metadata
        are deprecated and might be removed in a future version.

      o Updated skins to search listCreators() and show all creators.

    - TypeInfos: _finishConstruction() now calls reindexObject().
      This makes sure changes made by ScriptableTypeInformation scripts are
      indexed and notifyModified() is called after content creation.

    - Document: Removed WorkflowMethod wrapper of setFormat().
      This was the only wrapped MutableDublinCore method and caused an ugly
      second reindexObject() / notifyModified() call in the middle of
      _editMetadata().

    - CatalogTool: Updated to post Zope 2.6.2 ZCatalog interface.
      'catalog_object()' and 'reindexObject()' now support the new
      'update_metadata' argument. 'reindexObjectSecurity()' doesn't update
      catalog metadata anymore.

    - Added new hook to CookieCrumbler "twiddleAuthCookie". The
      twiddleAuthCookie skin script, if present is called on each request
      where a cookie authentication token is present. It is passed the auth
      cookie name and value so that it can perform such functions as
      extending the expiration of the cookie. A twiddleAuthCookie script
      along with a setAuthCookie script could create login sessions that
      timeout after a period of inactivity for example.

    - Refactored ActionsTool and Action providers:

      o Added listActionInfos() and getActionInfo() to the ActionProvider
        Interface, added 'object' argument to listActions().

      o Added OldstyleActionProvider Interface and OldstyleActionProviderBase
        for Action providers still not using ActionInformation objects.
        WorkflowTool and CMFCore DiscussionTool use this.

      o Action providers queried by ActionsTool should implement the new
        ActionProvider Interface. Action providers subclassing
        ActionProviderBase inherit the necessary methods.

      o To ease transition it will be sufficient to implement the
        OldstyleActionProvider Interface, using OldstyleActionProviderBase.
        The use of Action providers not implementing one of these Interfaces
        is deprecated. Support for them will be removed after CMF 1.5.

      o Added helper methods getOAI() and getExprContext() to get computed
        contexts from REQUEST cache or create new ones.

    - CMFDefault MembershipTool and zpt skin: Added 'Manage members' Action.
      The skin now provides basic membership management: Browsing members,
      registering new members and deleting members including their member
      data, member area and Local Roles.

    - The caching policy manager now sets the header
      'X-Cache-Headers-Set-By' when it sets cache headers
      in a response.

    - FSDTMLMethods now play nicely with the caching policy manager.

    - zpt skin: Added batch_widgets.pt and getBatchNavigation.py.
      roster and search use now the new navigation macro. Looks like before,
      but i18n works better and it's easier to reuse or replace the code.

    - zpt skin: Added zpt version of registered_notify_template.

    - CMFCorePermissions: Made them available for import by Scripts.

    - CMFCore MembershipTool and MemberDataTool: Added 'delete' methods.

      o deleteMemberData() deletes the member data of a member.

      o deleteMemberArea() deletes the member area of a member.

      o deleteLocalRoles() now has a 'recursive' argument.

      o deleteMembers() deletes members including member data, member area
        and Local Roles.

    - CMFCore MembershipTool: Changed interface.

      o createMemberarea() is now called createMemberArea(). For backwards
        compatibility createMemberarea is a deprecated alias.

      o getMembersFolder() is now also part of the CMFCore interface.

    - CMFCorePermissions: Added 'Change local roles' Permission.
      PortalFolder's 'Local Roles' Action and MembershipTool's Local Roles
      methods are now guarded by 'Change local roles' of the object.

    - Added CMFCore 'exceptions.py': Errors defined in this module are
      available for import by Scripts.

    - CMFCore and CMFDefault MembershipTool: Changed permissions.
      'createMemberarea()' for someone else and 'getRoster()' including
      hidden members are now protected by 'Manage users'. 'getMemberById()',
      listMemberIds() and listMembers() as well.

    - Document and NewsItem: Un-hardwired 'manage_FTPget()' for 'text/html'.
      Added 'source_html.dtml' and 'source_html.pt'. 'manage_FTPget()' now
      has a 'gethtml' hook and uses 'source_html' by default.
      (Collector #168)

    - TypeInformation: Added Method Aliases.

      o TypesTool and TypeInformation now have an 'Aliases' tab to configure
        Method Aliases TTW.

      o factory_type_information now has a key 'aliases' to configure Method
        Aliases in a product. This key is required, but may be empty: If it
        doesn't exist, TypeInformation will try to update by guessing
        aliases.

      o DynamicType manipulates 'TraversalRequestNameStack' depending on
        Method Aliases. '(Default)' and 'view' aliases bypass __call__() and
        view() methods on traversal.

      o PortalFolder's 'mkdir' hook now makes use of Method Aliases.

    - CMFCore and CMFDefault MembershipTool: Changed member area creation.
      'wrapUser()' does no longer call 'createMemberarea()'.
      'createMemberarea()' should now be called from the 'logged_in' page.

    - CMFDefault MembershipTool: Added a customization hook to
      'createMemberarea()'. A 'createMemberContent' script placed inside the
      tool overrides default member content creation.

  Bug Fixes

    - zpt skin: Removed dependency on dtml layers.

    - CMFCore utils: Marked 'format_stx' function as deprecated.
      It's no longer necessary to work around default STX handling.

    - DirectoryView: Refactored path handling.
      Should now work with any products path setup. (Collector #210)

    - Enforced new "local permissions" pattern:  each top-level CMF product
      should have a 'permissions.py' module which imports / declares all
      permissions used within the product;  other modules within the product
      should import from there.  Likewise for 'exceptions.py'.

    - Removed pre Zope 2.7.0 compatibility code. Now Zope 2.7.0 or a later
      platform is required for CMF.

    - CatalogTool: Marked the 'meta_type' index as deprecated.

    - PortalFolder: Marked the 'spec' argument as deprecated.
      Use the 'filter' argument with 'portal_type' instead for
      contentItems(), contentIds(), contentValues() and listFolderContents().

    - PortalFolder: Fixed portal_type acquisition bug in ContentFilter.

    - DynamicType: Added 'getPortalTypeName()' to the interface.

    - Collector #227:  expose ZPT filename in tracebacks which include
      FSPageTemplates.

    - zpt skin: Switched base tag policy back to that of dtml skin.
      This makes the use of relative URLs in content easier. If you have
      content that depends on the old policy you can customize getBaseTag.pt
      and add a slash. (Collector #66)

    - Actions of folderish types: Fixed some inconsistencies.
      Whatever the old CMFDefault policy was - this is the current policy:
      "object" is used for Actions related to the object itself, "folder" is
      used for Actions related to the container of the object.

      o Changed the category of PortalFolder and SkinnedFolder Actions to
        'object'.

      o Moved 'folderContents' of folderish types from ActionsTool to
        PortalFolder's type info. Other folderish types now have to declare
        their own 'folderContents' Action if they need one.

      o Renamed Topic's 'subtopics' and SkinnedFolder's 'foldercontents'
        Action to 'folderContents' to get them in sync.

    - StrippingParser: Added 'big', 'small', 'sub' and 'sup' to valid tags.

    - _checkPermission: Added check for executable owner and proxy roles.

    - SkinsContainer: Fixed context wrappers returned by getSkinByPath().
      The original context of skin folders is now removed. This avoids having
      SkinTool attributes added to the CMFSite root object.

    - CatalogTool: Removed deprecated 'id' from default indexes and metadata.

    - Skins: Fixed a DateTime related issue in search_form and doFormSearch.
      Added one second to epoch to work around the problem that the timezone
      gets lost if time is 00:00:00.

    - CMFCore.PortalFolder: Explicitly declare base interfaces.

    - Tests: CachingPolicyManager tests don't fail on Windows anymore.
      (Collector #107)

    - SkinsTool: Fixed cookie paths.
      clearSkinCookie() now uses the same cookie path as updateSkinCookie()
      which is now "inside-out" hosting safe.

    - DefaultDublinCoreImpl: Changed accessor permissions.
      As defined in the interface accessors are now protected by 'View'.

    - CMFDefault utils: Made 'tuplize()' work correctly with string types.

    - CMFCore utils: Reverted obsolete workaround in _checkPermission.

    - Skin scripts: Made except statements safer by being more specific. Hope
      this still catches all relevant errors.

    - Removed some pre 'Zope 2.4.3 with PageTemplates' backwards
      compatibility cruft. A later platform is required since CMF 1.3.

    - Collector #153: CookieCrumbler didn't preserve query strings.
