[CMF-checkins] CVS: CMF - CHANGES.txt:1.205 HISTORY.txt:1.38

Tres Seaver tseaver at zope.com
Fri Jul 9 15:26:13 EDT 2004


Update of /cvs-repository/CMF
In directory cvs.zope.org:/tmp/cvs-serv22966

Modified Files:
	CHANGES.txt HISTORY.txt 
Log Message:
 - Reshuffle / clean up change logs in preparation for a 1.5 alpha release.


=== CMF/CHANGES.txt 1.204 => 1.205 ===
--- CMF/CHANGES.txt:1.204	Thu Jul  8 04:06:11 2004
+++ CMF/CHANGES.txt	Fri Jul  9 15:26:13 2004
@@ -1,7 +1,11 @@
-CMF 1.5alpha (unreleased)
+CMF 1.5.0-alpha (2004/07/09)
 
   New Features
 
+    - New CMFSetup 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,
@@ -285,7 +289,3 @@
       cruft. A later platform is required since CMF 1.3.
 
     - Collector #153: CookieCrumbler didn't preserve query strings.
-
-CMF 1.4x
-
-  see CHANGES.txt of CMF-1_4-branch


=== CMF/HISTORY.txt 1.37 => 1.38 ===
--- CMF/HISTORY.txt:1.37	Sat Apr 26 15:16:23 2003
+++ CMF/HISTORY.txt	Fri Jul  9 15:26:13 2004
@@ -1,3 +1,325 @@
+CMF 1.4.5 (2004/07/08)
+
+  Bug Fixes
+
+    - When someone customises something twice, rather than raise an error,
+      show them a nice message and takes them to the already customised
+      object.
+
+    - FSImage didn't recognize '.bmp' files (Collector #245).
+
+    - Further hardening of member property, 'email', to prevent trickier
+      header injection into system-generated e-mails (Collector #243 redux).
+
+CMF 1.4.4 (2004/05/14)
+
+  Bug Fixes
+
+    - Unchecked member property, 'email', could allow header injection
+      into system-generated e-mails (Collector #243).
+
+CMF 1.4.3 (2004/04/22)
+
+  Bug Fixes
+
+    - CMFCalendar.CalendarTool: Converted '_usage' queries to dictionary
+      syntax. Shuts up DeprecationWarnings in Zope 2.7.
+
+    - CMFCore.CachingPolicyManager:  make REQUEST argument optional
+      for public methods, to ease scripting policy operations from
+      setup code. (Collector #234)
+
+    - Action definitions: Removed leading spaces. (Collector #229)
+
+CMF 1.4.3-rc1 (2004/02/05)
+
+  Bug Fixes
+
+    - CMFCore.PortalFolder: Explicitly declare base interfaces.
+
+    - CMFCore.MembershipTool: Don't swallow ConflictError during wrapUser.
+
+    - CMFDefault.SkinnedFolder: Creator() method now resembles the one from
+      DublinCore. This allows for unowned objects and shuts up a deprecation
+      warning in Zope 2.6.4/2.7.0.
+
+    - CMFCore.CookieCrumbler: No longer disregards an existing cookie auth
+      token for DAV requests (like PROPFIND) that occur over the main HTTP
+      port. Eliminates additional user challenges for browser-based DAV
+      clients like MS WebFolders.
+
+    - CMFCore.FSMetadata: the "acquire" flag for permission mappings was
+      not converted to an int;  '0' was therefore coming through as true.
+
+    - CMFCore.FSPageTemplate.py: compatibiltity with Python 2.3 (can't
+      mutate a class' __dict__ directly;  use setattr(klass, name, value)
+      instead).
+
+CMF 1.4.2 (2003/10/27)
+
+  Bug Fixes
+
+    - CMFDefault RegistrationTool:  enforced using the member's e-mail
+      address, rather than the one passed in from the request.
+
+    - CMFCore MembershipTool: Fixed 'getCandidateLocalRoles()'.
+      Didn't work without having 'Member' role. (Collector #148 and #169)
+
+    - CMFCore MembershipTool: Changed the permission for searchMembers to
+      'List portal members'. By default Anonymous users are no longer able to
+      list member ids and email addresses. (Collector #189)
+
+CMF 1.4.1 (2003/09/08)
+
+  Bug Fixes
+
+    - Initialize class security correctly on ActionProviderBase
+      (Collector #186).
+
+    - Filesystem-based scripts should open their files in text mode, not
+      binary (Collector #185).
+
+    - Remove ownership from filesystem-based skin methods, which
+      can't be trojaned, and therefore need not pay the performance
+      penalty of ownership checking.
+
+    - CMFCore/MembershipTool.py:  include traceback in log messages
+      for errors during 'wrapUser'.
+
+    - CMFDefault/skins: Fix permission name and html in roster.
+
+    - CMFCore/TypesTool.py: Make sure oldstyle FactoryTypeInformation
+      data is always converted.  Actions are now completely migrated during
+      TypeInformation creation.
+
+    - CMFCore/utils.py: Fix buglet in 'minimalpath()', which caused
+      proudct lookup to fail when a second 'Products' directory was
+      in the path.
+
+    - CMFCore/Skinnable.py: Fix acquisition wrapping so that getPhysicalPath
+      is not spoofed during funny traversals.
+
+    - CMFCore/TypesTool.py:  Fix ownership of constructor scripts used by
+      ScriptableTypeInformation (Collector #165).
+
+    - CMFDefault/skins: Fix some minor template issues in ZPT skins
+      (Collector #156 and other).
+
+    - CMFDefault and CMFCalendar skins: Fix stylesheets (Collector #164).
+
+    - CMFCalendar:  fix bug in month-spanning events (patch from Helge
+      Tesdal).
+
+    - CMFCore and CMFDefault MembershipTool: Make sure 'createMemberarea()'
+      always grants the right Ownership and Owner role for new member folders.
+      This doesn't fix existing member folders with wrong Owner roles.
+      If you use a customized MembershipTool, make sure your createMemberarea
+      method does the Right Thing.
+      (Collector #162)
+
+CMF 1.4 (2003/05/19)
+
+  Bug Fixes
+
+    - The memberdata tool now fetches properties from member objects using
+      'getProperty' when returning search results, rather than performing
+      direct attribute access on the member.
+
+    - The CookieCrumber now functions for HEAD requests.
+
+    - type actions: They are now absolute URLs by default.
+      For 'getActionById' and '_getViewFor' they are converted to relative
+      URLs. (Collector #152)
+
+CMF 1.4beta1 (2003/04/28)
+
+  New Features
+
+    - Made TypeInformation objects derive from CMFCore.ActionProviderBase:
+      their actions are now TALES expressions, and they have conditions
+      (like all the "tool actions").
+
+    - zpt skins (CMFDefault): Added i18n attributes.
+      See INSTALL.txt for installing internationalization support.
+      (Collector #122, thanks to Gitte Wange for her contribution)
+
+    - zpt skins (CMFDefault): Added 'zpt_content/transition_form.pt'.
+      'content_*_form.pt' now use this template.
+
+    - skins (CMFDefault): Made scripts independent of submit button 'values'.
+
+    - Added .css to the extensions that create FSFile objects in
+      DirectoryViews (see CMFCore/FSFile.py)
+      All sites upgrading which expected css extension to be dropped and to
+      contain DTML will be required to rename their css files to foo.dtml.
+      (Collector #129)
+
+    - Added .js to the extensions that create FSFile objects in
+      DirectoryViews
+
+    - MembershipTool (CMFDefault): Un-hardwired members folder.
+      You now can get the members folder object using 'getMembersFolder()'.
+      If you want to change the id of the members folder, rename the folder
+      and set the members folder using portal_membership's configuration tab.
+      (Collector #128)
+
+    - utils: Changed behavior of 'bodyfinder' and 'html_headcheck'.
+      The head check in html_headcheck is now a bit different, but the result
+      should be closer to what people expect.
+      The head check in bodyfinder is removed. In most cases you want to call
+      bodyfinder only if html_headcheck is true.
+
+    - Added FSFile skin object, in order to allow .swf files (et al.) in
+      skins
+
+    - Added 'listMetaTags' skin method, which filters the DublinCore
+      metadata into a form suitable for inclusion as <meta> tags.
+
+    - Added .metadata file for FSObjects, which allows the easy addition of
+      more features without adding lots and lots of files. ConfigParser format.
+
+    - Added proxy roles to FS Python Scripts and FS DTML Methods via the proxy
+      property in .metadata files.
+
+  Bug Fixes
+
+    - utils: Changed behavior of 'StrippingParser' and 'scrubHTML'.
+      They now close empty tags.
+      (Collector #108, thanks to 'tanghus' for the patch)
+
+    - Removed deprecated 'register' module and 'PortalContentRegistration'
+      interface.
+
+    - Moved URLTool to CMFCore. Added interface and basic tests.
+      (Collector #67)
+
+    - Protected the Pending review action in DefaultWorkflow by
+      ReviewPortalContent (Collector #52).
+
+    - Raise ValueError instead of TypeError in TypesTool.getActionById
+      if the action is not found (Collector #56).
+
+    - Cleaned up Interfaces and API Help (Collector #96):
+
+      o Removed redundant 'Syndicatable' and 'IndexableContent' interfaces.
+
+      o Removed unfixable 'Membership' and 'ReviewableContent' interfaces.
+
+      o Removed listActions() from 'Contentish' and 'portal_workflow'
+        interface.
+
+      o Removed redundant or 'None' overriding of listActions().
+
+      o Updated all interfaces to work with new Zope 2.6 Interface API.
+
+      o Added 'portal_properties' and 'Dynamic' interfaces.
+
+      o Added many interface implementation tests and made them pass.
+
+    - MembershipTool (CMFDefault): Fixed acquisition bug. (Collector #102)
+
+    - Skinnable: Changed docstring for setupCurrentSkin and added
+      docstring to changeSkin: the latter is now used to set skin
+      manually mid-request. (Collector #27)
+
+    - Document: Ensured that setFormat('text/plain') does not overwrite
+      text_format if text_format is 'plain'. (Collector #140)
+
+    - Action providers: Default _actions' are now tuples, not lists.
+      (Collector #123)
+
+    - Document: Ensured that 'edit()' and 'PUT()' strip of xhtml headers and
+      html headers including DOCTYPE declarations. (Collector #41)
+
+    - Fixed some minor buglets. (Collector #80, #94 and #95)
+
+    - Ensure that a couple of calls to string.split only split into a
+      maximum of two parts.
+      (Collector #82)
+
+    - Enabled the CMF to be installed in a PRODUCTS_PATH.
+      In doing so, also made it easier to move CMF sites between
+      Windows and Unix.
+      (Collector #64)
+
+    - Multimodule checkin to convert calls from user.getUserName() to
+      user.getId() where appropriate.  User names should not be used
+      as immutable references, while user ids should.  The distinction
+      is not clearly enforcd in the stock user folder or any current user
+      folder implementations, but newer user folder implementations
+      will rely upon it.
+
+    - Remove redundant VERSION.txt files;  the canonical spelling is
+      'version.txt' (Collector #13).
+
+    - Correct security assertion on CMFDefault.Image's manage_afterAdd
+      (Collector #141).
+
+    - Ensure that the security attributes are reindexed on all
+      subobjects too when a folderish object changes state in the
+      workflow (Collector #115).
+
+    - Backport fix of CMFCore/tests/test_FSImage.py to work with
+      recent Zopes (> 2.6), which force HTTP headers to be strings.
+
+    - Use return instead of raise in RegistrationTool.testPropertiesValidity
+      if id is incorrect (Collector #48).
+
+    - Correctly cleanup temporaries in CMFCore.MemberDataTool when
+      wrapping a user object (Collector #136).
+
+CMF 1.3.3 (2003/10/26)
+
+  Bug Fixes
+
+    - Ensure that e-mail address to which we mail the user's password
+      in 'registeredNotify' comes from the member, rather than the
+      request (thanks to Yvo Schubbe for the report).
+
+    - Restrict ability to search members to users who have the 'List
+      portal members' permission (Collector #189).
+
+CMF 1.3.2 (2003/09/05)
+
+  Bug Fixes
+
+    - Initialize class security correctly on ActionProviderBase
+      (Collector #186).
+
+    - Remove ownership from filesystem-based skin methods, which
+      can't be trojaned, and therefore need not pay the performance
+      penalty of ownership checking.
+
+    - Skinnable: Fix __of__ method so that it does not remove previous
+      acquisition wrappers, which leads to invalid UIDs in the catalog
+      when indexing objects using methods acquired from "above" the CMF
+      site.
+
+    - Sort candiate selection list when adding a FilesystemTypeInfo
+      or ScriptableTypeInfo object to the types tool.
+
+    - Open filesystem-based skin methods as text files, to avoid
+      platform-specific line-ending issues (Collector #185).
+
+    - Correct security assertion on CMFDefault.Image's manage_afterAdd
+      (Collector #141).
+
+    - Ensure that the security attributes are reindexed on all
+      subobjects too when a folderish object changes state in the
+      workflow (Collector #115).
+
+    - Backport fix of CMFCore/tests/test_FSImage.py to work with
+      recent Zopes (> 2.6), which force HTTP headers to be strings.
+
+    - Use return instead of raise in RegistrationTool.testPropertiesValidity
+      if id is incorrect (Collector #48).
+
+    - CookieCrumbler: Accept authentication on HEAD requests. 
+      Thanks to Brent Hendricks.
+
+    - Correctly cleanup temporaries in CMFCore.MemberDataTool when
+      wrapping a user object (Collector #136).
+
 CMF 1.3.1 (2003/03/06)
 
   Bug Fixes
@@ -550,950 +872,956 @@
 
 CMF 1.2 beta (2001/12/07)
 
- New features
+  New features
 
-  - Added docs from the crack ZC docs guys; these docs live in
-    the top-level 'docs' directory.
+    - Added docs from the crack ZC docs guys; these docs live in
+      the top-level 'docs' directory.
 
-  - Merged CMFDecor product's artifacts into CMFCore /
-    CMFDefault;  theses aretifacts allow use of filesystem-based
-    Zope Page Templates as skins.
+    - Merged CMFDecor product's artifacts into CMFCore /
+      CMFDefault;  theses aretifacts allow use of filesystem-based
+      Zope Page Templates as skins.
 
-    Note that the CMFDecor skin is the one which will be
-    receiving all our development focus:  we will fix bugs in the
-    DTML skins, but are not likely to invest significant effort
-    in upgrading it.
+      Note that the CMFDecor skin is the one which will be
+      receiving all our development focus:  we will fix bugs in the
+      DTML skins, but are not likely to invest significant effort
+      in upgrading it.
 
-  - Hooked 'manage_addFolder' to allow creation of PortalFolders
-    from both WebDAV, FTP, and ZMI.
+    - Hooked 'manage_addFolder' to allow creation of PortalFolders
+      from both WebDAV, FTP, and ZMI.
 
-  - Improved tracebacks from broken FSDTMLMethods, which no longer
-    indicate that every problem is in RestrictedDTML.
+    - Improved tracebacks from broken FSDTMLMethods, which no longer
+      indicate that every problem is in RestrictedDTML.
 
-  - Made it possible to add CookieCrumblers in nested folders.
-    You can just drop in a cookie crumbler anywhere to change the
-    login form for that area of the site.  In fact, now you don't
-    have to create a user folder just to change the login
-    process.
+    - Made it possible to add CookieCrumblers in nested folders.
+      You can just drop in a cookie crumbler anywhere to change the
+      login form for that area of the site.  In fact, now you don't
+      have to create a user folder just to change the login
+      process.
 
-  - Made Link objects editable via FTP / WebDAV.
+    - Made Link objects editable via FTP / WebDAV.
 
-  - Merged Chris Withers' FSSQLMethod into CMFCore.
+    - Merged Chris Withers' FSSQLMethod into CMFCore.
 
-  - Added documentation for installing from CVS.
+    - Added documentation for installing from CVS.
 
-  - Moved permission checking inside personalize_form to make
-    sure Anonymous cannot access it without logging in (CMF Tracker
-    Issue 349, thanks go to Bill Anderson).
+    - Moved permission checking inside personalize_form to make
+      sure Anonymous cannot access it without logging in (CMF Tracker
+      Issue 349, thanks go to Bill Anderson).
 
-  - Added initial CMF use cases as FSSTXMethods in CMFDefault/help.
+    - Added initial CMF use cases as FSSTXMethods in CMFDefault/help.
 
-  - Made validation methods of 'portal_metadata' available to
-    scripts.
+    - Made validation methods of 'portal_metadata' available to
+      scripts.
 
-  - Made skinned 'index_html' reflect generic view on folder
-    content, rather than simple title/description of the portal.
+    - Made skinned 'index_html' reflect generic view on folder
+      content, rather than simple title/description of the portal.
 
-  - Added "Change and View" submit button to content editing
-    forms;  added check for this button to POST handlers in CMFDefault,
-    and indirected redirect targets in those methods through
-    'getActionByID'.
+    - Added "Change and View" submit button to content editing
+      forms;  added check for this button to POST handlers in CMFDefault,
+      and indirected redirect targets in those methods through
+      'getActionByID'.
 
-  - Added knob for skin cookie persistence to SkinsTool's
-    "properties" tab.  The default policy (unchanged) is that
-    skin cookies expire at the end of the browser session.  if
-    Skin Cookie Persistence is checked the cookie will last a
-    full yesr.
+    - Added knob for skin cookie persistence to SkinsTool's
+      "properties" tab.  The default policy (unchanged) is that
+      skin cookies expire at the end of the browser session.  if
+      Skin Cookie Persistence is checked the cookie will last a
+      full yesr.
 
-  - Added an API to the 'portal_actions' interface for querying,
-    adding, and removing action providers.
+    - Added an API to the 'portal_actions' interface for querying,
+      adding, and removing action providers.
 
-  - Added a "multi-review" form, enabling a reviewer to publish
-    or reject multiple items at once, using a common comment.
+    - Added a "multi-review" form, enabling a reviewer to publish
+      or reject multiple items at once, using a common comment.
 
-  - Added ZMI tab to DirectoryView to allow re-basing the
-    filesystem path.
+    - Added ZMI tab to DirectoryView to allow re-basing the
+      filesystem path.
 
-  - Added "breadcrumbs" to CMFDecor skins.
+    - Added "breadcrumbs" to CMFDecor skins.
 
-  - Added initial support for WebDAV locaking to PortalContent.
+    - Added initial support for WebDAV locaking to PortalContent.
 
-  - Added SortCriterion to list of criterion types for Topics,
-    to permit sorting of results.
+    - Added SortCriterion to list of criterion types for Topics,
+      to permit sorting of results.
 
-  - Added "Local Roles" action to folders to ease collaboration.
+    - Added "Local Roles" action to folders to ease collaboration.
 
-  - Add scarecrow assertions for the CMF-centric interfaces, and
-    made the actual interfaces compatible with the standard
-    Zope Interface package.
+    - Add scarecrow assertions for the CMF-centric interfaces, and
+      made the actual interfaces compatible with the standard
+      Zope Interface package.
 
-  - Made FSSTXMethod display skinnable, and added ZPT version.
+    - Made FSSTXMethod display skinnable, and added ZPT version.
 
-  - Added 'visible' attribute to TypeInformation actions, to
-    permit indirection (via 'getActionById') without exposing the
-    action in the CMF UI.
+    - Added 'visible' attribute to TypeInformation actions, to
+      permit indirection (via 'getActionById') without exposing the
+      action in the CMF UI.
 
-  - Extended MetadataTool to allow adding / removing element specs
-    (i.e., it can now manage policies for "custom" schemas, as
-    well as Dublin Core).
+    - Extended MetadataTool to allow adding / removing element specs
+      (i.e., it can now manage policies for "custom" schemas, as
+      well as Dublin Core).
 
- Bug fixes
+  Bug fixes
 
-  - Refactored content and metadata editing methods of
-    DefaultDublinCoreImpl, Document, and NewsItem to disentangle
-    the excessive coupling.  Each "path" for editing now has a
-    "presentation"-level method, which directs traffic and
-    reindexes the object;  the underlying methods are much
-    simplified.
+    - Refactored content and metadata editing methods of
+      DefaultDublinCoreImpl, Document, and NewsItem to disentangle
+      the excessive coupling.  Each "path" for editing now has a
+      "presentation"-level method, which directs traffic and
+      reindexes the object;  the underlying methods are much
+      simplified.
 
-  - Fixed inner / named links in Document / News Item (thanks to 
-    Kenichi Sato for the patch!)
+    - Fixed inner / named links in Document / News Item (thanks to 
+      Kenichi Sato for the patch!)
 
-  - Ensured that editing methods handle WebDAV locks correctly,
-    using a new 'failIfLocked' assertion.
+    - Ensured that editing methods handle WebDAV locks correctly,
+      using a new 'failIfLocked' assertion.
 
-  - Added cookString method to CMFCore.utils for taking a string
-    and making it id friendly, it also does a string.lower on the
-    resultant regex.  Changed TypesTool to utilize cookString to
-    ensure that action ids are properly formated if the name is
-    being used as the id.
+    - Added cookString method to CMFCore.utils for taking a string
+      and making it id friendly, it also does a string.lower on the
+      resultant regex.  Changed TypesTool to utilize cookString to
+      ensure that action ids are properly formated if the name is
+      being used as the id.
 
-  - Added 'getReply' to CMFDefault.DiscussionItem.DiscussionItemContainer,
-    to permit access to an individual reply without needing to
-    do traversal.
+    - Added 'getReply' to CMFDefault.DiscussionItem.DiscussionItemContainer,
+      to permit access to an individual reply without needing to
+      do traversal.
 
-  - Corrected pass-through of 'file' and 'seatbelt' arguments in
-    new 'CMFDefault.Document.edit' method;  also sync'ed ZMI edit
-    method for documents with standard protocol (Tracker #417).
+    - Corrected pass-through of 'file' and 'seatbelt' arguments in
+      new 'CMFDefault.Document.edit' method;  also sync'ed ZMI edit
+      method for documents with standard protocol (Tracker #417).
 
-  - Added cookString method to CMFCore.utils for taking a string and
-    making it id friendly, it also does a string.lower on the resultant
-    regex.
-    
-  - Made examples in INSTALL.txt less terse, and added notes on
-    Windows-specific issues (thanks to Johan Mukhsein for the
-    suggestions).
+    - Added cookString method to CMFCore.utils for taking a string and
+      making it id friendly, it also does a string.lower on the resultant
+      regex.
+      
+    - Made examples in INSTALL.txt less terse, and added notes on
+      Windows-specific issues (thanks to Johan Mukhsein for the
+      suggestions).
 
-  - Made error message generated by FSPropertiesObject capture the
-    offending line and line #;  also, added logic to allow blank
-    lines and comment lines beginning with '#' (tracker #338).
+    - Made error message generated by FSPropertiesObject capture the
+      offending line and line #;  also, added logic to allow blank
+      lines and comment lines beginning with '#' (tracker #338).
 
-  - Added fixup to Link objects for user-entered URLs which don't
-    supply scheme:  for example, fix up 'www.zope.com' to
-    'http://www.zope.com'.  (tracker #361)
+    - Added fixup to Link objects for user-entered URLs which don't
+      supply scheme:  for example, fix up 'www.zope.com' to
+      'http://www.zope.com'.  (tracker #361)
 
-  - Updated CMFCore.CatalogTool to allow new, optional 'idxs'
-    argument to 'catalog_object' (tracker #405).
+    - Updated CMFCore.CatalogTool to allow new, optional 'idxs'
+      argument to 'catalog_object' (tracker #405).
 
-  - Added a workaround for the problem where the CookieCrumber
-    set cookies even though the user entered an incorrect password.
-    RESPONSE.unauthorized() now cancels the cookie response
-    header.  The new login_form and logged_in form both try to
-    invoke unauthorized(), so make sure you install the new
-    forms.
+    - Added a workaround for the problem where the CookieCrumber
+      set cookies even though the user entered an incorrect password.
+      RESPONSE.unauthorized() now cancels the cookie response
+      header.  The new login_form and logged_in form both try to
+      invoke unauthorized(), so make sure you install the new
+      forms.
 
-  - Implement the notional 'search results item' interface for
-    SkinnedFolder.
+    - Implement the notional 'search results item' interface for
+      SkinnedFolder.
 
-  - Corrected solecism in Topic (use of 'criteria' for singular);
-    removed the need to know about the funky generated IDs for
-    criterion objects.  Fixed derived bug in skins (tracker #408).
+    - Corrected solecism in Topic (use of 'criteria' for singular);
+      removed the need to know about the funky generated IDs for
+      criterion objects.  Fixed derived bug in skins (tracker #408).
 
-  - Modified error-logging code to avoid potential leaks of
-    traceback frame.
+    - Modified error-logging code to avoid potential leaks of
+      traceback frame.
 
-  - Made Document's 'manage_FTPget' use 'EditableBody', rather than
-    accessing 'text' attribute directly (improves reusability).
-    Likewise 'Document.SearchableText'.
+    - Made Document's 'manage_FTPget' use 'EditableBody', rather than
+      accessing 'text' attribute directly (improves reusability).
+      Likewise 'Document.SearchableText'.
 
-  - Merged Seb Bacon's refactoring of 'getDefaultView' into
-    'CMFCore.utils._getView'; clients can now specify a view by name,
-    as well.
+    - Merged Seb Bacon's refactoring of 'getDefaultView' into
+      'CMFCore.utils._getView'; clients can now specify a view by name,
+      as well.
 
-  - Made the default content type for Image 'image/png', instead
-    of the unintuitive 'text/html' inherited from DefaultDublinCoreImpl
-    (tracker #384).
+    - Made the default content type for Image 'image/png', instead
+      of the unintuitive 'text/html' inherited from DefaultDublinCoreImpl
+      (tracker #384).
 
-  - Corrected typo in ActionsTool which broke actions for the root
-    portal object (tracker #379).
+    - Corrected typo in ActionsTool which broke actions for the root
+      portal object (tracker #379).
 
-  - Updated the MemberDataTool to use an OOBTree, instead of the
-    old-style BTree, to store member data wrappers (CMF Tracker 375).
+    - Updated the MemberDataTool to use an OOBTree, instead of the
+      old-style BTree, to store member data wrappers (CMF Tracker 375).
 
-  - Corrected 'personalize_form' to use 'getProperty' where feasible,
-    rather than relying on direct attribute access (tracker #372).
+    - Corrected 'personalize_form' to use 'getProperty' where feasible,
+      rather than relying on direct attribute access (tracker #372).
 
-  - Removed an incompatibility with LoginManager in
-    CMFCore.MembershipTool (tracker #365).
+    - Removed an incompatibility with LoginManager in
+      CMFCore.MembershipTool (tracker #365).
 
-  - Removed an infinite loop condition that arises when
-    MembershipTool.createMemberArea gets called inside wrapUser
-    (this could only happen if "Create Member Area" was checked
-    in the Membership tool.)
+    - Removed an infinite loop condition that arises when
+      MembershipTool.createMemberArea gets called inside wrapUser
+      (this could only happen if "Create Member Area" was checked
+      in the Membership tool.)
 
-  - Added new 'TitleOrId' skin method, and updated skins to
-    depend on it rather than SimpleItem.title_or_id.
+    - Added new 'TitleOrId' skin method, and updated skins to
+      depend on it rather than SimpleItem.title_or_id.
 
-  - Made unit tests runnable without reliance on 'zctl test'.
+    - Made unit tests runnable without reliance on 'zctl test'.
 
-  - Corrected initial column set in catalog to include
-    "ModificationDate" instead of "ModifiedDate".
+    - Corrected initial column set in catalog to include
+      "ModificationDate" instead of "ModifiedDate".
 
-  - Ensured that object is recatalogued (e.g., after setting
-    'portal_type';  thanks to Florent Guillaume).
+    - Ensured that object is recatalogued (e.g., after setting
+      'portal_type';  thanks to Florent Guillaume).
 
-  - Removed silly dependency of 'CatalogTool.searchResults' on
-    REQUEST (catalog already does the Right Thing (tm) when no
-    REQUEST is available).  Note that this requires updates to
-    the 'search' skins, as they didn't pass it in.
+    - Removed silly dependency of 'CatalogTool.searchResults' on
+      REQUEST (catalog already does the Right Thing (tm) when no
+      REQUEST is available).  Note that this requires updates to
+      the 'search' skins, as they didn't pass it in.
 
-  - Changed redirect target after rejecting an item to the search
-    page for pending content items;  this resolves the problem
-    that the non-Manager reviewr who rejects an item no longer
-    has View permission on it, and therefore gets an Unauthorized
-    when redirecting to the object's view action.
+    - Changed redirect target after rejecting an item to the search
+      page for pending content items;  this resolves the problem
+      that the non-Manager reviewr who rejects an item no longer
+      has View permission on it, and therefore gets an Unauthorized
+      when redirecting to the object's view action.
 
-  - Moved generation of the "Add to Favorites" and "My Favorites"
-    links from the CMFCore/ActionsTool into the
-    CMFDefault/MembershipTool, which is a more logical location
-    for it because it relies on information from the membership tool.
+    - Moved generation of the "Add to Favorites" and "My Favorites"
+      links from the CMFCore/ActionsTool into the
+      CMFDefault/MembershipTool, which is a more logical location
+      for it because it relies on information from the membership tool.
 
-  - Made Topic directly publishable (like PortalContent), using its
-    'view' action (or the first action found, if view is not present).
+    - Made Topic directly publishable (like PortalContent), using its
+      'view' action (or the first action found, if view is not present).
 
-  - Set title for newly-created member folders;  fixes
-    breadcrumbs that expect a title on the object.
+    - Set title for newly-created member folders;  fixes
+      breadcrumbs that expect a title on the object.
 
-  - Allow URLs with query strings in StructuredText links.
+    - Allow URLs with query strings in StructuredText links.
 
-  - Update 'news_box' to search based on 'Type', rather than
-    'meta_type'.
+    - Update 'news_box' to search based on 'Type', rather than
+      'meta_type'.
 
-  - Fix 'SkinnedFolder.Creator()' to call 'getOwner()' with
-    info argument.
+    - Fix 'SkinnedFolder.Creator()' to call 'getOwner()' with
+      info argument.
 
-  - Made CookieCrumbler check for 'WEBDAV_SOURCE_PORT'
-    environment variable (supplied by Zope 2.4.1+), and bail on
-    intercepting authentication if found.
+    - Made CookieCrumbler check for 'WEBDAV_SOURCE_PORT'
+      environment variable (supplied by Zope 2.4.1+), and bail on
+      intercepting authentication if found.
 
-  - Included 'Owner' in list of significant roles returned by
-    'MembershipTool.getPortalRoles' (e.g., so that the
-   "Local Roles" interface can allow assignment of it).
+    - Included 'Owner' in list of significant roles returned by
+      'MembershipTool.getPortalRoles' (e.g., so that the
+     "Local Roles" interface can allow assignment of it).
 
-  - Allow users with local role of "Reviewer" to see the "pending
-    review" action.
+    - Allow users with local role of "Reviewer" to see the "pending
+      review" action.
 
-  - Made TypesTool, rather than individual type objects,
-    responsible for generating "immediate view" URL;  type
-    objects now return the newly-created object, which makes
-    scripting them much simpler.
+    - Made TypesTool, rather than individual type objects,
+      responsible for generating "immediate view" URL;  type
+      objects now return the newly-created object, which makes
+      scripting them much simpler.
 
-  - Remove fossilized reference to 'getSecurityManager' from
-    'PortalContent._verifyActionPermissions'.
+    - Remove fossilized reference to 'getSecurityManager' from
+      'PortalContent._verifyActionPermissions'.
 
-  - Modified the redirect after "Add to Favorites" to us the
-    view action, rather than 'view'.
+    - Modified the redirect after "Add to Favorites" to us the
+      view action, rather than 'view'.
 
-  - Fixed 'Document.guessFormat()' to use
-    'utils.html_headcheck()' instead of 'bodyfinder' regex to
-    detect structured text versus html;  avoids recursion limit
-    for large HTML files.
+    - Fixed 'Document.guessFormat()' to use
+      'utils.html_headcheck()' instead of 'bodyfinder' regex to
+      detect structured text versus html;  avoids recursion limit
+      for large HTML files.
 
-  - Removed spurious 'afterCreate' protocol for content objects.
+    - Removed spurious 'afterCreate' protocol for content objects.
 
-  - Added mapping of 'css' file extension to FSDTMLMethods.
+    - Added mapping of 'css' file extension to FSDTMLMethods.
 
-  - Modifed PortalFolder.listFolderContents to handle
-    permission-based filtering; duplicates what skip_unauthorized
-    is doing in DocumentTemplate/DT_IN.py (but works for ZPT as
-    well).
+    - Modifed PortalFolder.listFolderContents to handle
+      permission-based filtering; duplicates what skip_unauthorized
+      is doing in DocumentTemplate/DT_IN.py (but works for ZPT as
+      well).
 
-  - Modified CMFDefault.RegistrationTool.addMember to avoid
-    flunking validation if properties are not passed (Tracker
-    #335).
+    - Modified CMFDefault.RegistrationTool.addMember to avoid
+      flunking validation if properties are not passed (Tracker
+      #335).
 
-  - Applied patch from Chris Withers to 'register' skin method;
-    the patch which avoids quoting problems for the error message
-    if a problem occurs (Tracker #339).
+    - Applied patch from Chris Withers to 'register' skin method;
+      the patch which avoids quoting problems for the error message
+      if a problem occurs (Tracker #339).
 
-  - Added 'DiscussionItem.replyCount' (Tracker #328).
-    'DiscussionItem.hasReplies' now returns only a boolean value.
-    Standard skins don't call 'replyCount' due to performance
-    concerns.
+    - Added 'DiscussionItem.replyCount' (Tracker #328).
+      'DiscussionItem.hasReplies' now returns only a boolean value.
+      Standard skins don't call 'replyCount' due to performance
+      concerns.
 
-  - Factored content filtering logic into a Python Script.
+    - Factored content filtering logic into a Python Script.
 
-  - Improved handling of multiple rename targets (thanks to Chris
-    Withers for the patch.)
+    - Improved handling of multiple rename targets (thanks to Chris
+      Withers for the patch.)
 
-  - Completed conversion of form targets from DTML Methods to
-    Python Scripts.
+    - Completed conversion of form targets from DTML Methods to
+      Python Scripts.
 
-  - Improved compatibility with Zope 2.4:
+    - Improved compatibility with Zope 2.4:
 
-    o support for new "restricted execution" mode;
+      o support for new "restricted execution" mode;
 
-    o support for new catalog initialization API.
-  
-    o updated 'test_all' unit test drivers to use standard
-      'unittest' module from Python 2.1 (it no longer has
-      'JUnitTestTextRunner' class).
+      o support for new catalog initialization API.
+    
+      o updated 'test_all' unit test drivers to use standard
+        'unittest' module from Python 2.1 (it no longer has
+        'JUnitTestTextRunner' class).
 
 CMF 1.1 final (2001/06/20)
 
- New features
+  New features
 
-  - Landed "skinned folder" module, which permits creation of
-    "folderish" types with customized replacements for 'index_html'.
+    - Landed "skinned folder" module, which permits creation of
+      "folderish" types with customized replacements for 'index_html'.
 
-  - Added 'run_all_tests' script, to simplify running all unit
-    tests for CMF-related products.
+    - Added 'run_all_tests' script, to simplify running all unit
+      tests for CMF-related products.
 
-  - Factored out index and column lists, to ease customization
-    (Tracker #289)
+    - Factored out index and column lists, to ease customization
+      (Tracker #289)
 
-  - Modified DefaultDublinCoreImpl#setContributors() to use new
-    tuplize functionality (the ability to pass in a different
-    splitter function).  If a string is passed in to
-    setContributors(), it gets split on semicolons.  This allows
-    setting of contributor strings to be like
+    - Modified DefaultDublinCoreImpl#setContributors() to use new
+      tuplize functionality (the ability to pass in a different
+      splitter function).  If a string is passed in to
+      setContributors(), it gets split on semicolons.  This allows
+      setting of contributor strings to be like
 
-     "Doe, John E (john at doe.a.deer); The Mertz Family Foundation; PBS"
+       "Doe, John E (john at doe.a.deer); The Mertz Family Foundation; PBS"
 
-    If one so deeply and dearly desired.  (The above would turn
-    into a three element tuple).
+      If one so deeply and dearly desired.  (The above would turn
+      into a three element tuple).
 
-  - Made it possible to map "normal" Zope objects as content
-    (Tracker #283):
+    - Made it possible to map "normal" Zope objects as content
+      (Tracker #283):
 
-    o Skin and tool code which used to query the object
-      for its Type in order to then ask the types tool for a
-      TypeInfo object now just asks the types tool for type
-      TypeInfo object directly.
-   
-    o Modified the TypesTool interface to signal that passing an
-      object to 'getTypeInfo' is acceptable, with the semantic
-      that the tool will attempt to find a TypeInfo object based
-      on the tool's type or metatype.
+      o Skin and tool code which used to query the object
+        for its Type in order to then ask the types tool for a
+        TypeInfo object now just asks the types tool for type
+        TypeInfo object directly.
+     
+      o Modified the TypesTool interface to signal that passing an
+        object to 'getTypeInfo' is acceptable, with the semantic
+        that the tool will attempt to find a TypeInfo object based
+        on the tool's type or metatype.
 
-  - Expanded signature of Document.CookedBody to change the
-    header levels Structured Text starts rendering at, and
-    whether to preserve those changes, following the following
-    logic:
+    - Expanded signature of Document.CookedBody to change the
+      header levels Structured Text starts rendering at, and
+      whether to preserve those changes, following the following
+      logic:
 
-      If the format is html, and 'stx_level' is not passed in or
-      is the same as the object's current settings, return the
-      cached cooked text.  Otherwise, recook.  If we recook and
-      'setlevel' is true, then set the recooked text and
-      stx_level on the object.
+        If the format is html, and 'stx_level' is not passed in or
+        is the same as the object's current settings, return the
+        cached cooked text.  Otherwise, recook.  If we recook and
+        'setlevel' is true, then set the recooked text and
+        stx_level on the object.
 
- Bug fixes
+  Bug fixes
 
-  - Hardened DirectoryView against objects which raise exceptions
-    during initial reads (typically due to permission problems);
-    these objects now capture and log the exception, and create
-    a BadFile object which allows browsing the traceback via the
-    ZMI (Tracker #317).
+   - Hardened DirectoryView against objects which raise exceptions
+     during initial reads (typically due to permission problems);
+     these objects now capture and log the exception, and create
+     a BadFile object which allows browsing the traceback via the
+     ZMI (Tracker #317).
 
-  - Stopped polluting the browser with persistent skin cookie;
-    clear it as well on logout (Tracker #304).
+   - Stopped polluting the browser with persistent skin cookie;
+     clear it as well on logout (Tracker #304).
 
-  - Cleaned up folder content filtering (Tracker #298, thanks
-    to Chris Withers for the patch).
+   - Cleaned up folder content filtering (Tracker #298, thanks
+     to Chris Withers for the patch).
 
-  - Implement new "List folder contents" permission (Tracker
-    #320), to prevent non-privileged users from being able to
-    browse 'folder_contents' (permission is by default mapped
-    to 'Owner' and 'Manager').
+   - Implement new "List folder contents" permission (Tracker
+     #320), to prevent non-privileged users from being able to
+     browse 'folder_contents' (permission is by default mapped
+     to 'Owner' and 'Manager').
 
-    Note that this is really only a UI change:
-    'PortalFolder.contentIds', 'PortalFolder.contentValues', and
-    'PortalFolder.contentItems' are still public, to allow for
-    reasonable "site map" views on folders.
+     Note that this is really only a UI change:
+     'PortalFolder.contentIds', 'PortalFolder.contentValues', and
+     'PortalFolder.contentItems' are still public, to allow for
+     reasonable "site map" views on folders.
 
-  - Use saner type ID listing in 'search_form' (Tracker #324).
+   - Use saner type ID listing in 'search_form' (Tracker #324).
 
-  - Rewired "POST target" skin methods, replacing filesystem-based
-    DTML Methods with filesystem-based Python Scripts (from
-    Tracker #301 -- thanks to Chris Withers).
+   - Rewired "POST target" skin methods, replacing filesystem-based
+     DTML Methods with filesystem-based Python Scripts (from
+     Tracker #301 -- thanks to Chris Withers).
 
-  - Implemented *LARGE* patch to CMFDefault.DiscussionItem and
-    CMFDefault.DiscussionTool, plus removal of
-    CMFDefault.Discussions:  changed threading strategy to remove
-    dependency on the path of the "host" content object.  Includes
-    an ExternalMethod, CMFDefault/Extensions/update_discussion.py,
-    which must be run to convert existing content which contains
-    discussion.
+   - Implemented *LARGE* patch to CMFDefault.DiscussionItem and
+     CMFDefault.DiscussionTool, plus removal of
+     CMFDefault.Discussions:  changed threading strategy to remove
+     dependency on the path of the "host" content object.  Includes
+     an ExternalMethod, CMFDefault/Extensions/update_discussion.py,
+     which must be run to convert existing content which contains
+     discussion.
 
-  - Overrode DublinCore's isEffective in CMFCalendar.Event to
-    always return true;  this change prevents blocking view of
-    the event by standard_html_header.
+   - Overrode DublinCore's isEffective in CMFCalendar.Event to
+     always return true;  this change prevents blocking view of
+     the event by standard_html_header.
 
-  - Updated INSTALL.txt to note that:
+   - Updated INSTALL.txt to note that:
 
-     o Use with Zope 2.4.0a1 is *not* recommended.
+      o Use with Zope 2.4.0a1 is *not* recommended.
 
-     o CMFDecor requires Zope Page Templates (Tracker #291).
+      o CMFDecor requires Zope Page Templates (Tracker #291).
 
-    and to describe upgrade process from CMF 1.0.
+     and to describe upgrade process from CMF 1.0.
 
-  - Fixed typo in 'Unauthorized' exception raised by
-    'PortalContent._getDefaultView'.
+   - Fixed typo in 'Unauthorized' exception raised by
+     'PortalContent._getDefaultView'.
 
-  - Made all content types findable by catalog (Tracker #286).
+   - Made all content types findable by catalog (Tracker #286).
 
-  - Ensured that ContentTypeRegistry's "Test" tab doesn't puke if
-    no MIMEtype is entered, or if one is entered which doesn't
-    have a '/' in it (Tracker #292).
+   - Ensured that ContentTypeRegistry's "Test" tab doesn't puke if
+     no MIMEtype is entered, or if one is entered which doesn't
+     have a '/' in it (Tracker #292).
 
-  - Suppressed overwrite of Subject when no 'Subject' or
-    'Keywords' headers were present (Tracker #294).
+   - Suppressed overwrite of Subject when no 'Subject' or
+     'Keywords' headers were present (Tracker #294).
 
-  - Ensured that 'Type' is indexed in newly-created
-    'portal_catalog'.
+   - Ensured that 'Type' is indexed in newly-created
+     'portal_catalog'.
 
-  - Fixed acquisition stripping in PortalContent.objectItems().
+   - Fixed acquisition stripping in PortalContent.objectItems().
 
-  - Modified CMFDefault.DublinCore.getMetadataHeaders() to join
-    Subject by commas, instead of spaces.  Since we parse/split
-    Subject on commas or semicolons now when a document is saved
-    by FTP or WebDAV, we need to feed it out in the same format.
+   - Modified CMFDefault.DublinCore.getMetadataHeaders() to join
+     Subject by commas, instead of spaces.  Since we parse/split
+     Subject on commas or semicolons now when a document is saved
+     by FTP or WebDAV, we need to feed it out in the same format.
 
-  - Fleshed out security declarations for 'portal_metadata' tool.
+   - Fleshed out security declarations for 'portal_metadata' tool.
 
-  - Corrected pathname of 'MemberDataTool.memberdataContents' to
-    account for use of '_dtmldir' (thanks to Ricardo Newbery for
-    the patch!).
+   - Corrected pathname of 'MemberDataTool.memberdataContents' to
+     account for use of '_dtmldir' (thanks to Ricardo Newbery for
+     the patch!).
 
-  - Fixed buglet resulting from uninitialized local in
-    'PortalContent.objectItems' (thanks to Seb Bacon for the
-    patch).
+   - Fixed buglet resulting from uninitialized local in
+     'PortalContent.objectItems' (thanks to Seb Bacon for the
+     patch).
 
-  - Modified stock 'search_form' to query 'Type' rather than
-    'meta_type'.
+   - Modified stock 'search_form' to query 'Type' rather than
+     'meta_type'.
 
-  - Removed debugging / "paranoia" print statements (thanks to
-    Chris Withers for the patches).
+   - Removed debugging / "paranoia" print statements (thanks to
+     Chris Withers for the patches).
 
 CMF 1.1 beta (2001/06/01)
 
- New features
+  New features
 
-  - Added CMFCore.utils.keywordsplitter to construct 'Subject'
-    dublin core header from both 'Keywords' and 'Subject' headers
-    passed in (meta tags/rfc822).
+    - Added CMFCore.utils.keywordsplitter to construct 'Subject'
+      dublin core header from both 'Keywords' and 'Subject' headers
+      passed in (meta tags/rfc822).
 
-  - CMF Document now uses StructuredTextNG for structured text
-    handling.  Nicely enough, it uses the "with images" features, and
-    also enables named and inner links.
+    - CMF Document now uses StructuredTextNG for structured text
+      handling.  Nicely enough, it uses the "with images" features, and
+      also enables named and inner links.
 
-  - CMF Document exposes two new accessor methods for getting at the
-    "cooked" and editable body, 'CookedBody()', and 'EditableBody()'.
-    Using the 'cooked_text' and 'text' instance attributes should be
-    considered deprecated.
+    - CMF Document exposes two new accessor methods for getting at the
+      "cooked" and editable body, 'CookedBody()', and 'EditableBody()'.
+      Using the 'cooked_text' and 'text' instance attributes should be
+      considered deprecated.
 
-  - Added new "exemplar" content product, CMFCalendar, which
-    (for now) adds a simple content object, Event.  This product
-    serves a similar didactic purpose as CMFTopic (which is now
-    "in the core"):  it shows how to build new content types as
-    filesystem products.
+    - Added new "exemplar" content product, CMFCalendar, which
+      (for now) adds a simple content object, Event.  This product
+      serves a similar didactic purpose as CMFTopic (which is now
+      "in the core"):  it shows how to build new content types as
+      filesystem products.
 
-  - Implemented improved "safety belt" for concurrent Document
-    editing.  See the dogbowl proposal,
-     http://cmf.zope.org/rqmts/proposals/ContentSafetyBelt
+    - Implemented improved "safety belt" for concurrent Document
+      editing.  See the dogbowl proposal,
+       http://cmf.zope.org/rqmts/proposals/ContentSafetyBelt
 
-  - Added new filesystem-based skin method type, FSSTXMethod, for
-    creating "methods" which render STX.
+    - Added new filesystem-based skin method type, FSSTXMethod, for
+      creating "methods" which render STX.
 
-  - Exposed "controlled vocabulary" for Subject in
-    'metadata_edit_form'.
+    - Exposed "controlled vocabulary" for Subject in
+      'metadata_edit_form'.
 
-  - Gave 'portal_skins' tool its own PUT_factory (Tracker #238).
-    Allows site builder to create skin methods via WebDAV/FTP,
-    including ZPT, PythonScripts, etc.
+    - Gave 'portal_skins' tool its own PUT_factory (Tracker #238).
+      Allows site builder to create skin methods via WebDAV/FTP,
+      including ZPT, PythonScripts, etc.
 
-  - Implemented "outbound" segment of the "Syndication tool"
-    proposal, q.v.,
-     http://cmf.zope.org/CMF/Members/andrew/folderRSS
+    - Implemented "outbound" segment of the "Syndication tool"
+      proposal, q.v.,
+       http://cmf.zope.org/CMF/Members/andrew/folderRSS
 
-  - Made 'PUT_factory' use new 'content_type_registry' tool.
+    - Made 'PUT_factory' use new 'content_type_registry' tool.
 
-  - Made 'PUT_factory' use 'invokeFactory', so that objects
-    created via PUT have their 'portal_type' set properly.
+    - Made 'PUT_factory' use 'invokeFactory', so that objects
+      created via PUT have their 'portal_type' set properly.
 
-  - Added ContentTypeRegistry class and related predicates for
-    mapping PUT requests (name,content_type,body) to type object
-    names.
+    - Added ContentTypeRegistry class and related predicates for
+      mapping PUT requests (name,content_type,body) to type object
+      names.
 
-  - Allowed Reviewers to "retract" published content owned by
-    others.
+    - Allowed Reviewers to "retract" published content owned by
+      others.
 
-  - Added "Overview" ZMI view to tools.
+    - Added "Overview" ZMI view to tools.
 
-  - Added "Dublin Core" ZMI view to PortalContent;  added an
-    editing view for Document and derivatives.
+    - Added "Dublin Core" ZMI view to PortalContent;  added an
+      editing view for Document and derivatives.
 
-  - Added "drop-in" workflow objects to the WorkflowTool,
-    including the ability to map workflows onto content types.
+    - Added "drop-in" workflow objects to the WorkflowTool,
+      including the ability to map workflows onto content types.
 
-  - Changed CMFDefault.Portal to install CMF Topic by default
-    when building a new CMF Site.
+    - Changed CMFDefault.Portal to install CMF Topic by default
+      when building a new CMF Site.
 
-  - Added a new criteria type, *FriendlyDateCriterion*, to
-    CMFTopic for building queries like 'When effective_date is
-    less than five days old'.
+    - Added a new criteria type, *FriendlyDateCriterion*, to
+      CMFTopic for building queries like 'When effective_date is
+      less than five days old'.
 
-  - Implemented 'portal_metadata' tool.  See the dogbowl
-    proposal,
-    http://cmf.zope.org/rqmts/proposals/completed/metadata_tool. 
+    - Implemented 'portal_metadata' tool.  See the dogbowl
+      proposal,
+      http://cmf.zope.org/rqmts/proposals/completed/metadata_tool. 
 
-  - Extended DirectoryView objects to reload when the directory
-    they represent has changed, if Zope is running in debug mode.
+    - Extended DirectoryView objects to reload when the directory
+      they represent has changed, if Zope is running in debug mode.
 
-  - Added hooks to CookieCrumbler to permit site managers to
-    customize seting/expiring of the authentication cookie by
-    adding PythonScripts; two default filesystem implementations
-    are in CMFDefault's "control" skin.
+    - Added hooks to CookieCrumbler to permit site managers to
+      customize seting/expiring of the authentication cookie by
+      adding PythonScripts; two default filesystem implementations
+      are in CMFDefault's "control" skin.
 
-  - Extended TypesTool to deal appropriately with DTML factory
-    methods (e.g., for ZClasses).
+    - Extended TypesTool to deal appropriately with DTML factory
+      methods (e.g., for ZClasses).
 
-  - Made FSDTMLMethods searchable from the ZMI (Issue PTK(251)[]).
+    - Made FSDTMLMethods searchable from the ZMI (Issue PTK(251)[]).
 
- Bug Fixes
+  Bug Fixes
 
-  - Added 'manage_beforeDelete' to DiscussionItemContainer class,
-    and propagated to it from content deletion (Tracker #269).
+    - Added 'manage_beforeDelete' to DiscussionItemContainer class,
+      and propagated to it from content deletion (Tracker #269).
 
-  - Only display the "join" action if the user has the "Add
-    portal member" permission.
+    - Only display the "join" action if the user has the "Add
+      portal member" permission.
 
-  - Check for appropriate REQUEST variables before invoking
-    CopySupport machinery, return a nice 'portal_status_message'
-    instead of allowing the traceback to kick in (Tracker #247).
+    - Check for appropriate REQUEST variables before invoking
+      CopySupport machinery, return a nice 'portal_status_message'
+      instead of allowing the traceback to kick in (Tracker #247).
 
-  - Initialize default DublinCore metadata for the site, so that
-    *some* value is available everywhere (Tracker #285).
+    - Initialize default DublinCore metadata for the site, so that
+      *some* value is available everywhere (Tracker #285).
 
-  - Add module-level globals aliases, to permit other products
-    to use elements of skins (Tracker #273).
+    - Add module-level globals aliases, to permit other products
+      to use elements of skins (Tracker #273).
 
-  - Replaced 'metadata_edit' DTMLMethod with PythonScript.
+    - Replaced 'metadata_edit' DTMLMethod with PythonScript.
 
-  - Updated 'metadata_edit' to avoid clearing values not passed
-    in REQUEST (Tracker #268).
+    - Updated 'metadata_edit' to avoid clearing values not passed
+      in REQUEST (Tracker #268).
 
-  - Removed spurious whitespace being added to Subject.
+    - Removed spurious whitespace being added to Subject.
 
-  - Fixed FSPythonScript to open file in text mode, so that
-    Windows verstions with CR don't cause the parser to choke
-    (Tracker #284).
+    - Fixed FSPythonScript to open file in text mode, so that
+      Windows verstions with CR don't cause the parser to choke
+      (Tracker #284).
 
-  - Simplified login-disabling logic in CookieCrumbler.
+    - Simplified login-disabling logic in CookieCrumbler.
 
-  - Added '<base>' tag to headers of Document, NewsItem, and
-    DiscussionItem so that relative links work properly.
+    - Added '<base>' tag to headers of Document, NewsItem, and
+      DiscussionItem so that relative links work properly.
 
-  - Fixed the ActionsTool to suppress adding a trailing '/' to
-    "empty" action URL's.
+    - Fixed the ActionsTool to suppress adding a trailing '/' to
+      "empty" action URL's.
 
-  - Fixed Document's content type sniffing to deal with odd case
-    in which "entire" HTML document was embedded as an STX
-    example.
+    - Fixed Document's content type sniffing to deal with odd case
+      in which "entire" HTML document was embedded as an STX
+      example.
 
-  - Replaced literal string permissins with "named permissions",
-    imported from modules in most places. (Please report any
-    which escaped!)
+    - Replaced literal string permissins with "named permissions",
+      imported from modules in most places. (Please report any
+      which escaped!)
 
-  - Moved 'factory_type_information' registry entries back out
-    to the relevant modules (instead of lumping them in
-    CMFDefault.Portal).
+    - Moved 'factory_type_information' registry entries back out
+      to the relevant modules (instead of lumping them in
+      CMFDefault.Portal).
 
-  - Simplified NewsItem to "Document with a twist" (NewsItems now
-    inherit lots of useful behavior from Document.
+    - Simplified NewsItem to "Document with a twist" (NewsItems now
+      inherit lots of useful behavior from Document.
 
-  - Aliased DublinCore's Format() as 'content_type', so that
-    Zope's WebDAV support will do the Right Thing (TM) when
-    handling a PROPFIND.
+    - Aliased DublinCore's Format() as 'content_type', so that
+      Zope's WebDAV support will do the Right Thing (TM) when
+      handling a PROPFIND.
 
-  - Suppressed "eager redirect" behavior in CookieCrumbler for
-    FTP or WebDAV (note that WebDAV fix only works for "extra"
-    HTTP methods; GET/PUT/POST still redirect).
+    - Suppressed "eager redirect" behavior in CookieCrumbler for
+      FTP or WebDAV (note that WebDAV fix only works for "extra"
+      HTTP methods; GET/PUT/POST still redirect).
 
-  - Made sure to update the catalog when a content object's
-    parent is deleted / moved (Tracker #261).
+    - Made sure to update the catalog when a content object's
+      parent is deleted / moved (Tracker #261).
 
-  - Fixed lossage to File objects when no upload supplied
-    (Tracker #271).
+    - Fixed lossage to File objects when no upload supplied
+      (Tracker #271).
 
-  - Fixed "Add to Favorites" when applied to Folders.
+    - Fixed "Add to Favorites" when applied to Folders.
 
-  - Suppressed "Members" link in topbar (pointed to 'roster' method)
-    for users who would not be able to see it.
+    - Suppressed "Members" link in topbar (pointed to 'roster' method)
+      for users who would not be able to see it.
 
-  - Fixed irritating bugs in setting of skin-selection cookie.
+    - Fixed irritating bugs in setting of skin-selection cookie.
 
-  - Removed ugly '_mimetype_registry' hack for 'PUT_factory'.
+    - Removed ugly '_mimetype_registry' hack for 'PUT_factory'.
 
-  - Fixed a bug in CMFDefault.Document with PUT that only affected
-    FTP: when a StructuredText document that contained a full HTML
-    example (complete with <html>, <head>, and <body> tags) in its
-    body, it would pass the "does it smell like HTML" test and throw
-    everything away that wasn't inside the first matching pair of
-    <body> tags it found.  Funnily enough, this bug was exposed when
-    trying to save an article about how to use FTP with Zope and the
-    CMF that contained such an example.
+    - Fixed a bug in CMFDefault.Document with PUT that only affected
+      FTP: when a StructuredText document that contained a full HTML
+      example (complete with <html>, <head>, and <body> tags) in its
+      body, it would pass the "does it smell like HTML" test and throw
+      everything away that wasn't inside the first matching pair of
+      <body> tags it found.  Funnily enough, this bug was exposed when
+      trying to save an article about how to use FTP with Zope and the
+      CMF that contained such an example.
 
-  - Fixed glitch caused by '<dtml-return>' in
-    CMFDefault/skins/control/reconfig.dtml.  Thanks to Hans de Wit
-    <hw at scp.nl> for reporting this!
+    - Fixed glitch caused by '<dtml-return>' in
+      CMFDefault/skins/control/reconfig.dtml.  Thanks to Hans de Wit
+      <hw at scp.nl> for reporting this!
 
-  - Allowed 'portal_type' to be a method, as well as an attribute
-    (eases ZClass-as-content).
+    - Allowed 'portal_type' to be a method, as well as an attribute
+      (eases ZClass-as-content).
 
-  - Fixed search form to pass 'created' instead of 'date' (probably
-    need 'modified', too);  also, added selection list for 'Subject',
-    and fixed the "Last Month" option value.
+    - Fixed search form to pass 'created' instead of 'date' (probably
+      need 'modified', too);  also, added selection list for 'Subject',
+      and fixed the "Last Month" option value.
 
-  - Fixed non-import in CMFCore/WorkflowCore.py (Tracker #239,
-    thanks to 'snej' for the patch).
+    - Fixed non-import in CMFCore/WorkflowCore.py (Tracker #239,
+      thanks to 'snej' for the patch).
 
-  - Updated CatalogTool to handle searchable vs. displayable DublinCore
-    dates properly.
+    - Updated CatalogTool to handle searchable vs. displayable DublinCore
+      dates properly.
 
-  - Replaced usage of .id with .getId() all through the CMF, to
-    conform with the new SimpleItem API. Thanks to Jens Quade
-    <jq at jquade.de> for pointing this out. (Issue PTK(241)[]).
+    - Replaced usage of .id with .getId() all through the CMF, to
+      conform with the new SimpleItem API. Thanks to Jens Quade
+      <jq at jquade.de> for pointing this out. (Issue PTK(241)[]).
 
-  - Extended 'index_html' to render portal description using STX
-    (Tracker #246).
+    - Extended 'index_html' to render portal description using STX
+      (Tracker #246).
 
-  - Updated CMFDefault skins to use Contentish.getIcon, including
-    the portal catalog. This greatly simplifies using ZClasses as
-    content. In CMFDefault/scripts you will find
-    'convertCatalogGetIconColumn.pys), a Python Script that will
-    convert your existing Catalog to use 'getIcon' instead of
-    'icon' (Issue PTK(244)[]). Also, synched interface definition
-    to show the 'relative_to_portal' argument.
+    - Updated CMFDefault skins to use Contentish.getIcon, including
+      the portal catalog. This greatly simplifies using ZClasses as
+      content. In CMFDefault/scripts you will find
+      'convertCatalogGetIconColumn.pys), a Python Script that will
+      convert your existing Catalog to use 'getIcon' instead of
+      'icon' (Issue PTK(244)[]). Also, synched interface definition
+      to show the 'relative_to_portal' argument.
 
-  - Extended 'folder_factories' to filter type objects using
-    'isConstructionAllowed' in 'PortalFolder.allowedContentTypes'
-    (Tracker #249).
+    - Extended 'folder_factories' to filter type objects using
+      'isConstructionAllowed' in 'PortalFolder.allowedContentTypes'
+      (Tracker #249).
 
-  - Fixed display of replies on discussion items.
+    - Fixed display of replies on discussion items.
 
-  - Made appropriate use of 'portal_url', instead of BASEPATH
-    ad hockery, in skin methods (Tracker #259).
+    - Made appropriate use of 'portal_url', instead of BASEPATH
+      ad hockery, in skin methods (Tracker #259).
 
-  - Synched interface definition of 'Contentish.getIcon' with
-    reality (documented 'relative' parameter).
+    - Synched interface definition of 'Contentish.getIcon' with
+      reality (documented 'relative' parameter).
 
-  - Fixed "Ever" entry in 'search_form' to use a value safe in
-    timezones east of GMT (Tracker #236).
+    - Fixed "Ever" entry in 'search_form' to use a value safe in
+      timezones east of GMT (Tracker #236).
 
-  - Deprecated the CMFDefault.File.download method; it is still
-    available, but is no longer called by the current CMF skin,
-    nor is index_html aliased to it.
+    - Deprecated the CMFDefault.File.download method; it is still
+      available, but is no longer called by the current CMF skin,
+      nor is index_html aliased to it.
 
-    The method was necessary when the "View' method was the
-    default action when calling the URL of the File object, this
-    is no longer the case. The setting of the Content-Disposition
-    header is not needed when using the absolute URL of the
-    object, and causes certain browsers to misbehave.
+      The method was necessary when the "View' method was the
+      default action when calling the URL of the File object, this
+      is no longer the case. The setting of the Content-Disposition
+      header is not needed when using the absolute URL of the
+      object, and causes certain browsers to misbehave.
 
 CMF 1.0 final (2001/03/29)
 
- - Removed embedded spaces in 'portal_status_message' strings
-   (thanks to Dieter Maurer for pointing this out)
-
- - Added 'index_html' (copy/paste from CMFCore.PortalContent?!?) so
-   that topics become directly publishable (thanks to Dieter
-   Maurer for pointing this out).
-
- - Removed references to 'Images/' in skin DTML, adding an extra
-   item to the default skins' lookup path. In CMFDefault/scripts
-   you will find 'addImagesToSkinPaths.pys', a Python Script that
-   adds the extra name to all your skin paths. (Tracker issue
-   #205).
+  Bug Fixes
 
- - Added FSPythonScripts, allowing filesystem-based skins to
-   expose customizable PythonScripts.
+    - Removed embedded spaces in 'portal_status_message' strings
+      (thanks to Dieter Maurer for pointing this out)
 
- - Fixed CMF Tracker item (207), "HTML test when editing a Portal
-   Document is ambiguous".  Now, the same regular expression used
-   to scoop out the contents of the <body> tags, which is case
-   insensitive, is also used to detect whether the document may
-   be HTML.
+    - Added 'index_html' (copy/paste from CMFCore.PortalContent?!?) so
+      that topics become directly publishable (thanks to Dieter
+      Maurer for pointing this out).
 
- - Converted physical path to string (Tracker #224).
+    - Removed references to 'Images/' in skin DTML, adding an extra
+      item to the default skins' lookup path. In CMFDefault/scripts
+      you will find 'addImagesToSkinPaths.pys', a Python Script that
+      adds the extra name to all your skin paths. (Tracker issue
+      #205).
 
- - Fixed 'Creator' metadata for DiscussionItems (tracker issue
-   #206, thanks to Jeff Sasmor for the patch!).
+    - Added FSPythonScripts, allowing filesystem-based skins to
+      expose customizable PythonScripts.
 
- - Added simple search field for 'Subject' (Tracker #213).
+    - Fixed CMF Tracker item (207), "HTML test when editing a Portal
+      Document is ambiguous".  Now, the same regular expression used
+      to scoop out the contents of the <body> tags, which is case
+      insensitive, is also used to detect whether the document may
+      be HTML.
 
- - Fixed CMF Tracker issue 211, "Topics have Folder icon" by
-   finally moving the Topic icon into the skins, and writing a
-   custom icon() method that uses getIcon (Subclassing from
-   PortalFolder made this behavior strange).
+    - Converted physical path to string (Tracker #224).
 
- - Changed CMFDefault.Document__init__ to call self.edit at the
-   end, instead of self._parse, which means that HTML can finally
-   be passed into the constructor.  Unit tests verify that
-   initializing with just the 'id' gives the proper results.
+    - Fixed 'Creator' metadata for DiscussionItems (tracker issue
+      #206, thanks to Jeff Sasmor for the patch!).
 
- - Added installation script (external method) for CMFTopic.
+    - Added simple search field for 'Subject' (Tracker #213).
 
- - Ensured that content metatypes show up in the types list of the
-   portal_catalog tool (Tracker issue #209, thanks to Jeff
-   Sasmor).
+    - Fixed CMF Tracker issue 211, "Topics have Folder icon" by
+      finally moving the Topic icon into the skins, and writing a
+      custom icon() method that uses getIcon (Subclassing from
+      PortalFolder made this behavior strange).
 
- - Fixed unwanted multiple font reductions on 'recent_news'
-   (Tracker issue #215).
+    - Changed CMFDefault.Document__init__ to call self.edit at the
+      end, instead of self._parse, which means that HTML can finally
+      be passed into the constructor.  Unit tests verify that
+      initializing with just the 'id' gives the proper results.
 
- - Changed visited link color to enhance readability.
+    - Added installation script (external method) for CMFTopic.
 
- - Fixed PNG transparency of logo (for NS 4.7).
+    - Ensured that content metatypes show up in the types list of the
+      portal_catalog tool (Tracker issue #209, thanks to Jeff
+      Sasmor).
 
- - Allowed Contributors to publish content directly (Tracker
-   issue #216).
+    - Fixed unwanted multiple font reductions on 'recent_news'
+      (Tracker issue #215).
 
- - Gave more real estate to skin path fields (Tracker issue
-   #226).
+    - Changed visited link color to enhance readability.
 
- - Added simple listing of subtopics to the default view (Tracker
-   issue #214).
+    - Fixed PNG transparency of logo (for NS 4.7).
 
- - Regularized DiscussionItem.absolute_url (further work on
-   Tracker issues #203 & #206).
+    - Allowed Contributors to publish content directly (Tracker
+      issue #216).
 
- - Made 'addToFavorites' work as skinned method of target, and
-   work for DiscussionItems (Tracker issue #227).
+    - Gave more real estate to skin path fields (Tracker issue
+      #226).
 
- - Moved actual mail sending into CMFDefault.RegistrationTool, to
-   avoid having to give proxy roles to the skin methods involved
-   (Tracker issue #160).
+    - Added simple listing of subtopics to the default view (Tracker
+      issue #214).
 
- - Add member count to roster display.
+    - Regularized DiscussionItem.absolute_url (further work on
+      Tracker issues #203 & #206).
 
- - Made 'review_state' workflow info publically visible.
+    - Made 'addToFavorites' work as skinned method of target, and
+      work for DiscussionItems (Tracker issue #227).
 
- - Made DiscussionItem.getReplies() and
-   DiscussionItemContainter.getReplies() show only 'published'
-   replies (allows retraction, for now).
+    - Moved actual mail sending into CMFDefault.RegistrationTool, to
+      avoid having to give proxy roles to the skin methods involved
+      (Tracker issue #160).
 
- - Fixed WorkflowAction.__call__ to use the correct method name
-   for exception notification (Tracker issue #232).
+    - Add member count to roster display.
 
- - Ensure that reply's Creator propagates through preview (thanks
-   to Jeff Sasmor for reporting that our fix to Tracker issue
-   #206 missed the "Preview" case).
+    - Made 'review_state' workflow info publically visible.
 
- - Removed crufty calls to registerPortalContent.
+    - Made DiscussionItem.getReplies() and
+      DiscussionItemContainter.getReplies() show only 'published'
+      replies (allows retraction, for now).
 
- - Trimmed over-long item IDs in actions box (Tracker issue #
-   234;  thanks to Jeff Sasmor and Steve Alexandar for the patch).
+    - Fixed WorkflowAction.__call__ to use the correct method name
+      for exception notification (Tracker issue #232).
 
-1.0 beta (2001/03/05)
+    - Ensure that reply's Creator propagates through preview (thanks
+      to Jeff Sasmor for reporting that our fix to Tracker issue
+      #206 missed the "Preview" case).
 
- * Migrated from old PTK repository on cvs.zope.org.
+    - Removed crufty calls to registerPortalContent.
 
- * Changed package and module names:  'PTKBase' has become
-   (mostly) 'CMFCore';  'PTKDemo', 'CMFDefault'.
+    - Trimmed over-long item IDs in actions box (Tracker issue #
+      234;  thanks to Jeff Sasmor and Steve Alexandar for the patch).
 
- * Added package 'CMFTopic', which provides a new content type,
-   'Topic';  topics are "logical" folders, which aggregate
-   content based on catalog searches against metadata.
- 
- * Revised discussion mechanism to store discussion with its
-   underlying content (rather than in members' "Correspondence"
-   folders).
+CMF 1.0 beta (2001/03/05)
 
- * Mad the membership system agnostic to the kind of user
-   folder, including whether it is found in the portal or not.
+  Changes
 
- * "Skinned" the portal UI and all the content objects,
-   enabling portal managers to replace it "piecemeal", safely.
+   - Migrated from old PTK repository on cvs.zope.org.
 
- * Implemented local type registration, allowing portal
-   managers to configure and extend the types addable in the
-   portal.
+   - Changed package and module names:  'PTKBase' has become
+     (mostly) 'CMFCore';  'PTKDemo', 'CMFDefault'.
 
- * Add 'PortalFolder.allowedContentTypes' and supporting machinery
-   in type info objects, to permit configuration of the content
-   types addable to a given folder type.
+   - Added package 'CMFTopic', which provides a new content type,
+     'Topic';  topics are "logical" folders, which aggregate
+     content based on catalog searches against metadata.
+   
+   - Revised discussion mechanism to store discussion with its
+     underlying content (rather than in members' "Correspondence"
+     folders).
+
+   - Made the membership system agnostic to the kind of user
+     folder, including whether it is found in the portal or not.
+
+   - "Skinned" the portal UI and all the content objects,
+     enabling portal managers to replace it "piecemeal", safely.
+
+   - Implemented local type registration, allowing portal
+     managers to configure and extend the types addable in the
+     portal.
+
+   - Add 'PortalFolder.allowedContentTypes' and supporting machinery
+     in type info objects, to permit configuration of the content
+     types addable to a given folder type.
 
 CMF 0.10alpha (2001/02/02)
 
- * Fixed breakage of "reply" feature introduced by new
-   constructor regime (PTK Tracker #159).
+  Changes
+
+    - Fixed breakage of "reply" feature introduced by new
+      constructor regime (PTK Tracker #159).
 
- * Make creation of an 'acl_users' in the portal itself optional.
+    - Make creation of an 'acl_users' in the portal itself optional.
 
- * Add mapping of external roles (i.e., belonging to a user
-   retrieved from an acquired user folder) onto "portal-specific"
-   roles.  For example, users from the root user folder may
-   have the "Employee" role;  the 'portal_membership' tool can
-   map this role onto the "Member" role needed by the portal.
+    - Add mapping of external roles (i.e., belonging to a user
+      retrieved from an acquired user folder) onto "portal-specific"
+      roles.  For example, users from the root user folder may
+      have the "Employee" role;  the 'portal_membership' tool can
+      map this role onto the "Member" role needed by the portal.
 
- * Corrected HTML quoting of Document text (PTK Tracker #154).
+    - Corrected HTML quoting of Document text (PTK Tracker #154).
 
- * If content_url is not None and the user has their own member
-   folder (as returned by 'portal_membership.getHomeUrl') then
-   two new actions will show up in the user-related action box:
+    - If content_url is not None and the user has their own member
+      folder (as returned by 'portal_membership.getHomeUrl') then
+      two new actions will show up in the user-related action box:
 
-   - "Add to Favorites", adds an item to the user's "Favorites"
-     folder, which will get created underneath the user's home
-     folder if not present.
+      o "Add to Favorites", adds an item to the user's "Favorites"
+        folder, which will get created underneath the user's home
+        folder if not present.
 
-   - "My Favorites", linked to the Favorites folder (if the
-     member has one).
+      o "My Favorites", linked to the Favorites folder (if the
+        member has one).
 
- * Add 'Favorites' content type (derived from 'Link', optimized
-   for objects within the same site).
+    - Add 'Favorites' content type (derived from 'Link', optimized
+      for objects within the same site).
 
- * Add 'PTKBase.interfaces.Contentish', an interface describing
-   non-metadata methods for all content objects.
+    - Add 'PTKBase.interfaces.Contentish', an interface describing
+      non-metadata methods for all content objects.
 
- * Added cool new portal icon -- thanks to Michael Bernstein!
+    - Added cool new portal icon -- thanks to Michael Bernstein!
 
- * Add 'simple_metadata' and 'metadata_help' methods, for easing
-   "constructorish" capture of metadata.  Also demos "skinning"
-   object-specific DTML.
+    - Add 'simple_metadata' and 'metadata_help' methods, for easing
+      "constructorish" capture of metadata.  Also demos "skinning"
+      object-specific DTML.
 
- * Rearranged base classes to deal with the fact that SimpleItem
-   now has a _setId() method.
+    - Rearranged base classes to deal with the fact that SimpleItem
+      now has a _setId() method.
 
- * Added a "quick start" script for creating a new INSTANCE_HOME
-   sandbox (e.g., to allow easy experimentation with new-style
-   portal).
- 
- * Remove "metadata" editing from most "normal" edit forms.
+    - Added a "quick start" script for creating a new INSTANCE_HOME
+      sandbox (e.g., to allow easy experimentation with new-style
+      portal).
+    
+    - Remove "metadata" editing from most "normal" edit forms.
 
- * Tweak stylesheets to make Netscrape 4.x more happy (links on
-   secondary accent areas wouldn't show).
+    - Tweak stylesheets to make Netscrape 4.x more happy (links on
+      secondary accent areas wouldn't show).
 
- * Enforced standard construction interface (only 'id' is
-   required) on all "stock" content types.
+    - Enforced standard construction interface (only 'id' is
+      required) on all "stock" content types.
 
- * Added default factory registration in 'portal_types' for all
-   "stock" content types.
+    - Added default factory registration in 'portal_types' for all
+      "stock" content types.
 
- * Add 'portal_types' tool, allowing registry of type / constructor
-   information about portal content which may be created in a given
-   portal instance (replaces 'Wizards' folder as type registry).
+    - Add 'portal_types' tool, allowing registry of type / constructor
+      information about portal content which may be created in a given
+      portal instance (replaces 'Wizards' folder as type registry).
 
- * Added the description property to those attributes shown on the
-   "view" screen for a file object (PTK Tracker #153).
+    - Added the description property to those attributes shown on the
+      "view" screen for a file object (PTK Tracker #153).
 
- * Added credentialsChanged hook which can now work with
-   CookieCrumblers.
+    - Added credentialsChanged hook which can now work with
+      CookieCrumblers.
 
- * Added Shane Hathaway's CookieCrumbler product, which spoofs
-   HTTP Basic Auth for "don't know from cookies" user folders.
+    - Added Shane Hathaway's CookieCrumbler product, which spoofs
+      HTTP Basic Auth for "don't know from cookies" user folders.
 
- * Add object for mapping property lists as filesystem object (to
-   support parameterized stylesheet).  These objects are
-   customized as normal Folders, which allows a great deal of
-   flexibility.
+    - Add object for mapping property lists as filesystem object (to
+      support parameterized stylesheet).  These objects are
+      customized as normal Folders, which allows a great deal of
+      flexibility.
 
- * Corrected 'PTKDemo.File.edit' to avoid replacing file contents
-   with empty string when no file is uploaded (PTK Tracker #152).
+    - Corrected 'PTKDemo.File.edit' to avoid replacing file contents
+      with empty string when no file is uploaded (PTK Tracker #152).
 
- * Remove distribution-tab verisons of TTW products.
+    - Remove distribution-tab verisons of TTW products.
 
- * Remove derived UML model files (UML-HTML).
+    - Remove derived UML model files (UML-HTML).
 
- * Added the PortalGenerator class, which is a subclassable portal
-   instance creator, and created a new addable meta type.
+    - Added the PortalGenerator class, which is a subclassable portal
+      instance creator, and created a new addable meta type.
 
- * Removed ZClass dependency from PropertiesTool.
+    - Removed ZClass dependency from PropertiesTool.
 
- * Corrected glitch that 'PTKDemo.PortalObject.manage_options'
-   was inherited from ObjectManager rather than PortalFolder.
+    - Corrected glitch that 'PTKDemo.PortalObject.manage_options'
+      was inherited from ObjectManager rather than PortalFolder.
 
- * Add 'PUT_factory' to PTKBase.PortalFolder (make it replaceable,
-   too!)
+    - Add 'PUT_factory' to PTKBase.PortalFolder (make it replaceable,
+      too!)
 
- * Register PTKDemo content class metatypes with PTKBase.PortalFolder's
-   MIME-type registry.
+    - Register PTKDemo content class metatypes with PTKBase.PortalFolder's
+      MIME-type registry.
 
- * Unscrew PTKDemo.Document's dependence on vanished
-   NullPortalResource.
+    - Unscrew PTKDemo.Document's dependence on vanished
+      NullPortalResource.
 
- * Clean up CSS in DemoPortal (PTK Tracker #124).
+    - Clean up CSS in DemoPortal (PTK Tracker #124).
 
- * Remove dependency on PythonMethod in DemoPortal (PTK Tracker #151).
+    - Remove dependency on PythonMethod in DemoPortal (PTK Tracker #151).
 
- * Integrated user preference for "skin" with 'portal_skins'
-   options.
+    - Integrated user preference for "skin" with 'portal_skins'
+      options.
 
- * Added capability to filter * 'PortalFolder.content{Ids,ValuesItems}'
-   based on metadata queries.
+    - Added capability to filter * 'PortalFolder.content{Ids,ValuesItems}'
+      based on metadata queries.
 
- * Migrated skins from 'DemoPortal/Interfaces' folders into
-   filesystem skins directories.
+    - Migrated skins from 'DemoPortal/Interfaces' folders into
+      filesystem skins directories.
 
- * Improved integration of FSDTMLMethod and FSImage with output from
-   the FSDump product.
+    - Improved integration of FSDTMLMethod and FSImage with output from
+      the FSDump product.
 
- * New tab for the member data tool: 'contents' displays the number
-   of members stored in the member data tool and also the number
-   of "orphaned" members, meaning those that do not appear in the
-   underlying acl_users anymore. a button is provided to "prune"
-   those orphaned members.
+    - New tab for the member data tool: 'contents' displays the number
+      of members stored in the member data tool and also the number
+      of "orphaned" members, meaning those that do not appear in the
+      underlying acl_users anymore. a button is provided to "prune"
+      those orphaned members.
 
- * Added methods to examine the contents of the meber data tool and to
-   prune all those members who have been deleted out of the underlying
-   'acl_users'.
+    - Added methods to examine the contents of the meber data tool and to
+      prune all those members who have been deleted out of the underlying
+      'acl_users'.
 
- * Fixed bug when adding the mailhost during Portal initialization.
+    - Fixed bug when adding the mailhost during Portal initialization.
 
- * Added the portal_memberdata tool, which can wrap any user object with
-   member properties.  Yeehaw!  the portal no longer needs a special
-   user folder!
+    - Added the portal_memberdata tool, which can wrap any user object with
+      member properties.  Yeehaw!  the portal no longer needs a special
+      user folder!
 
- * Add 'portal_skins' tool, enabling safe TTW customization of the default
-   portal UI, which will be delivered as filesystem-based skin folders.
-   Huge kudos to Shane Hathaway, who figured out a sane way to do this!
+    - Add 'portal_skins' tool, enabling safe TTW customization of the default
+      portal UI, which will be delivered as filesystem-based skin folders.
+      Huge kudos to Shane Hathaway, who figured out a sane way to do this!
 
- * Extend fix for PTK Tracker #149 to 'generic' and 'sweng' interfaces.
+    - Extend fix for PTK Tracker #149 to 'generic' and 'sweng' interfaces.
 
- * Append '/view' to search results in order to allow navigation
-  to objects which don't use standard header/footer in their
-  'index_html', e.g., Images.  (PTK Tracker Issue #149)
+    - Append '/view' to search results in order to allow navigation
+      to objects which don't use standard header/footer in their
+      'index_html', e.g., Images.  (PTK Tracker Issue #149)
 
- * Add meta_type to DiscussionItem (PTK Tracker Issue #150).
+    - Add meta_type to DiscussionItem (PTK Tracker Issue #150).
 
- * Integrate Dan Pierson's patch to show discussion threads inline
-   (PTK Tracker issue #93).
+    - Integrate Dan Pierson's patch to show discussion threads inline
+      (PTK Tracker issue #93).
 
- * Fix PTK Tracker #145 (PTKDemo/Portal.py or MailHost broken):  the
-   2000/12/08 hotfix removed the "legacy" name, 'manage_addMailHost'.
+    - Fix PTK Tracker #145 (PTKDemo/Portal.py or MailHost broken):  the
+      2000/12/08 hotfix removed the "legacy" name, 'manage_addMailHost'.
 
- * Fix PTK Tracker #148 ('Table rows need vertical align')
+    - Fix PTK Tracker #148 ('Table rows need vertical align')
 
- * Fix PTK Tracker #147 ("PTKDemo's Metadata HTML is ugly").
+    - Fix PTK Tracker #147 ("PTKDemo's Metadata HTML is ugly").
 
- * Fix PTK Tracker issue #136 ('CSS selection broken').
+    - Fix PTK Tracker issue #136 ('CSS selection broken').
 
- * Fix Tracker issue #141 ('Wizard product has broken subobjects list').
+    - Fix Tracker issue #141 ('Wizard product has broken subobjects list').
 
- * Remove redundant 'description' arg from constructors (PTK Tracker
-   issue #142;  thanks to jon at totient.demon.co.uk for reporting this).
+    - Remove redundant 'description' arg from constructors (PTK Tracker
+      issue #142;  thanks to jon at totient.demon.co.uk for reporting this).
 
- * Enable FTP upload/creation of NewsItems
+    - Enable FTP upload/creation of NewsItems
 
- * Add the ability to query and set DublinCore metadata via FTP:
+    - Add the ability to query and set DublinCore metadata via FTP:
 
-   - Updated PTKDemo.DemoDublinCore.DemoDublinCore to add a
-     method, 'getMetadataHeaders()', which builds a list of
-     DublinCore headers, suitable for inclusion in <meta> tags
-     or in "Structured Text Headers".  
+      o Updated PTKDemo.DemoDublinCore.DemoDublinCore to add a
+        method, 'getMetadataHeaders()', which builds a list of
+        DublinCore headers, suitable for inclusion in <meta> tags
+        or in "Structured Text Headers".  
 
-   - Updated PTKDemo.Document.Document to export/import the
-     metadata when accessed via FTP.
+      o Updated PTKDemo.Document.Document to export/import the
+        metadata when accessed via FTP.
 
- * Fix PortalFolder.all_meta_types() to allow non-content.
+    - Fix PortalFolder.all_meta_types() to allow non-content.
 
- * Fix PortalFolder.listActions() to return a tuple, not a list
+    - Fix PortalFolder.listActions() to return a tuple, not a list



More information about the CMF-checkins mailing list