===================
CMFEditions Changes
===================

This file contains change information for the CMFEditions releases.


CMFEditions 1.0rc1 (2006-10-25)
-------------------------------

Bugs fixed

- Fixed OMInsideChildrensModifier InitializeClass. [encolpe]

Internal Changes

- Replaced usage of zLOG with Python's logging framework. [hannosch]

- Removed lots of unused import statements, found by pyflakes. [hannosch]

- Removed BBB code for old transaction handling. [hannosch]

- Removed some BBB code for ZClasses and CMF 1.4. [hannosch]


CMFEditions 1.0beta1 (2006-06-24)
---------------------------------

Bugs fixed

- Fixed previewing (retrieving) files and images. [gregweb]

- Security Policy was for ``manage_setPolicies`` but the method name 
  was ``manage_setTypePolicies``. Corrected. [gregweb]

- The storage now stores ZVC's ``__vc_info__`` for every version 
  avoiding wrong information is attached to a working copy when 
  previewing a version. Fix for ToDo.txt item #48. [gregweb]

- Replaced all occurences of ``rollback`` with ``revert``. Brought into
  sync internal names with UI. Rollback may suggest a transaction 
  rollback which is something different. Including i18n label
  ``label_rollback`` which is now ``label_revert``. Added backwards 
  compatibility code for configuration. Translations not updated.
  [gregweb]

- Minor refactorings of the version history view. Notably replaced
  ``(show below)`` by ``preview`` without jumping to the preview target
  on the page by default. Instead the link name of the previewed version
  changes to ``jump down``. [gregweb]

- The storage is now more immune against non int selectors. [gregweb]


Features Added

- The approximate size of a version is now recorded also at save time
  (and calculated at storage migartion).
  [gregweb]

- Added size information to storage statistics ZMI view [gregweb]

- Added German translations [gregweb]

- Added Polish translations provided by Piotr Furman [Piotr Furman, gregweb]

- ``RetainWorkflowStateAndHistory`` now adds the ``review_state`` to the
  ``sys_metadata`` at save time because at retreive time the workflow tool 
  picks the working copies state. I didn't find any other way to do it 
  without digging into workflows internals (which would have been a bad 
  idea anyway). Had to extend the ``IModifier.ISaveRetrieveModifier``
  interface to allow a modifier enhance ``sys_metadata`` at save time. 
  [gregweb]
  
- Added purge support [gregweb]:

  - Enhanced storage API with a ``purge`` method that inevitabely
    removes a version from the history. See added ``IPurgeSupport``
    and ``IPurgePolicy`` interfaces.
  - Purging raises an exception if no purge policy is installed. This
    will avoid a lot of future tracker items caused by people having
    removed the purge policy but nevertheless providing purge support 
    to users. The reason is that the archivist and repo layer can't 
    handle yet the empty placeholder object beeing returned by the 
    storage for the purged version. This rule may be relaxed in future 
    versions if the archivist and repo layer support handling of those 
    empty placeholder objects.
  - The UI doesn't expose manual purge functionality. Through the ZMI a
    number n may be configured representing the maximum number of
    version per content item that have to be preserved. Older ones are
    automatically purged from the storage at save time.
  - There is a new purge permission that may be used to restrict purging
    to special roles if necessary (applicable to manual purging only).
  - On the repo layer (``portal_repository``) retrieving an object or 
    iterating over the history always returns a valid (unpurged) 
    version. The returned object may be a substitute. Two numbering 
    schematas exist. Numbering counting purged versions and not 
    counting purged versions (passing True or False to ``countPurged``).
    The default numbering schema is ``countPurged=True``. The UI 
    history onyl shows unpurged versions (``countPurged=False``).
  - If the storage is asked to retreive a removed version it may be
    instructed to return a substitute for the removed version. The
    substitution policy itself is implemented in the new purge policy
    tool. This strategy allows to keep most purge implementation 
    details out of the upper layers (archivist, modifiers, repository).
  - The new purge policy tool may be instructed to only keep n versions 
    of a content item. Thus at save time the oldest version is purged 
    if the save operation would result in more than n version reside in 
    the storage.
  - The new purge policy tool substitutes a removed version with the
    next older version. If no other version is available the next 
    newer is used as substitute. If none is available ... well this 
    isn't yet tested :-)
  - The archivist and storage may be asked to also retreive the empty
    placeholder of a purged version. This functionality is yet exposed 
    to the repo layer. This may change in a future release.
  - Added ``isValid`` method on the vdata object that allows to ask if 
    the retrieved object it is valid or not (empty placeholder object 
    or a real version).
    
- At save time a version aware reference to the parent node is saved
  also. Without it would be very ineffective or even impossible to 
  find out the parents which potentially would prevent adding usefull
  features like retrieving the a whole site from one object in the 
  tree. [gregweb]

- The histories default order has changed: It now returns the newest 
  version as first item and the oldest as last item. The old behaviour
  is still available by passing ``oldestFirst=True``. [gregweb]

- Inserted the ``oldestFirst`` parameter before the already existing
  ``preserve`` parameter. This will cause changes of 3rd party products
  that are using ``preserve`` (None know at the moment, it's better to
  change now than later). [gregweb]

- Added two new i18n labels: ``label_preview_version_below``, 
  ``label_preview_version`` (no translations yet) [gregweb]

- Renamed i18n label: ``label_show_below`` to ``label_preview_version_link``
  (updated labels in po-files but not the translations) [gregweb]


Internal Changes

- Now save all metadata also in shadow storage. But currently on retrieve 
  the metadata is still feteched from the ZVC storage. [gregweb]

- Added migration code for 1.0alpha3 --> 1.0beta1 storage migrations
  [gregweb]

- Adding purge support caused heavy refactoring the version storage.
  ZVC is still used to store the contents history but now additional 
  data is stored in a parallel shadow storage. The layout of the data
  in the ZVC didn't change, only ZVC and purge related metadata has 
  been added to the parallel shadow storage. [gregweb]

- Garbage collected a lot of code that was commented out, outdated 
  triple-X's and items in ``ToDo.txt``. [gregweb]

- The storage tests now tests ZVCSTorageTool only once and additionally
  tests the dummy memory storage. This was the intended behaviour but
  a bug prevented running the tests with the dummy storage and instead
  run the tests with ZVCStorageToll twice. [gregweb]


CMFEditions 1.0alpha4 (2006-06-24)
----------------------------------

Bugs fixed

- fixed bug with AT references causing ref catalog having been inconsistent
  [sunew]


Features added

- Comment is now taken from request if any. [sunew]

- Added storage statistics ZMI view. [gregweb]

- Added functionality to create a test hierarchy. [gregweb]


CMFEditions 1.0alpha3 (2006-06-03)
----------------------------------

Bugs fixed

- Fixed tracker issue #15 [alecm, gregweb]

- When previewing a version the expandable history link is removed as this 
  doesn't make sense at all and caused double fetching of history items.
  [gregweb]

- Use the default view of the retrieved object, as it may be different from 
  that of the current object. [alecm]

- The expandable version link is only shown for users having the permission 
  to view the history. [rafrombrc]

- Added RetainATRefs modifier [vds]

- Fixed broken ``isUpToDate`` [gregweb]

- ``version_id`` wasn't correctly set at the working copy at save time. 
  Because of this it may happen that the wrong version info was saved 
  with the version aware reference. The version_id is now set at the end 
  of the save operation. [alecm, gregweb]

- Handle usecase where an inside reference is moved outside its container.
  Still need to handle case where it has been replaced by another object 
  with the same id.  [alecm]
  
- Changed API for Archivist methods and the dereference utility method so 
  that they now accept an optional history_id, rather than implicitly 
  allowing the 'obj' parameter to be a history_id. As side effect this
  will help in supporting multi location checkout in the future. 
  [alecm, gregweb]

- Fixed various UI issues. [rlemmi, vds, alecm]

- Fixed SF issue #1376836. [alecm]

- restored at's extra_buttons slot (some others slots are still missing 
  because of this template override) [syt]

- Totally refactored recursive retrieve of an ancient version of an object.
  Fixed a lot of folderish bugs with this refactoring. [gregweb]

- Corrected a hairy acquisition bug that caused wrong security evaluations
  (ArchivistTool.py). Acquisition is a monster feature! [gregweb]

- The storage now returns obj.modified() instead of 
  obj.getModificationDate() because it's more fine graned. [gregweb]

- Added ReferenceFactoriesTool.py which in essence knows how to 
  instatiate a reference. The current implementation is inflexible and
  knows only how to instantiate object into an ObjectManager. This
  is the first step in preparation for AT reference handling. [gregweb]

- Fixed tracker issue #16 RuntimeError: maximum recursion depth exceeded.
  I (gregweb) suspect it got fixed by: [alecm]

- Fixed identical tracker issues #5, #6, #7, #8. I (gregweb) suspect it got 
  fixed by: [alecm]

- Added modifier to copy permissions from working copy onto retrieved 
  versions, otherwise retaining workflow can have some very strange 
  consequences. [alecm]

- Fixed a number of bugs involving handling of adding and deleting subobjects
  of versioned folders.
  [alecm]

- Fixed a permissions bug which made the versions_history_form inaccessible if
  any of the versions were saved while private (or otherwise had
  'Access contents information' disabled).
  [alecm]

- Made quickinstalled product reinstall/uninstall work without issue.  Fixed
  unit tests for Plone 2.1.  Use mutators in templates and tests where
  applicable rather than direct attribute access. Was Issue #9, #10 and #11.
  Thanks to Andrew Lewis for the patches and reports. [Andrew Lewis, alecm]

- Corrected bugs in ``RetainWorkflowStateAndHistory`` modifier and the
  modifier registry avoiding the review state and the workflow history 
  from beeing retained on retrieve and revert. 


Features added

- Added danish translation. [stonor]

- Retrieving an object just for preview (without replacing the working copy) 
  caused a lot of headaches and got more and more complex und ununderstandable.
  Everything got much simpler by just using a savepoint/abort pair at the right 
  place while retrieving. [alecm]

- I18N tuned (diff-legend untested), french added
  [Gpgi, gotcha]

- Added more tests to improve coverage. [azy, vds, alecm]

- Added support for ATCT (Archetypes Content Types). [azy]

- Added ZMI interface for modifiers. [rlemmi]

- It's now possible to save a new version in the edit view. As soon as a 
  version sahll be saved a comment field is inserted to add a comment.
  [rlemmi]

- Added expandable version history to document_byline. [rlemmi]

- Made the ModifierRegistryTool make use of any preserve dict passed back to
  it by afterRetrieveModifiers.
  [alecm]

- Added optional CMFDiffTool support for generating diffs between object
  versions.  For this to work you need to setup the diffable fields on each
  type in portal_diff.  In the 'alecm-at-schema-diffs' branch of CMFDiffTool
  there is a diff type that can be applied to any AT object which will
  automatically setup diffs for all fields in the schema (when using this
  any value can be entered for the field in portal_diff).
  [alecm]

- Added a versioning policy (at_edit_autoversion) which automatically creates
  new versions on edit for AT types which are configured to support the policy
  in the configlet.  This is implemented using a simple macro override on
  AT's edit_macros, and a new entry in the AT edit form controller chain.
  [alecm]

- Added new interface IContentTypeVersionPolicySupport and implemented it in
  portal_repository.  It allows products to register versioning policies
  (classes which implement IVersionPolicy), and to associate those policies
  with specific portal types.  IVersionPolicy objects may define methods
  (setupPolicyHook, removePolicyHook, enablePolicyOnTypeHook,
  disablePolicyOnTypeHook) which can be used to install/uninstall policy
  specific behavior in the portal, on adding/removing the policy, or enabling/
  disabling the policy on a specific type.
  [alecm]


CMFEditions 1.0alpha2 (around June 2005)
----------------------------------------

no changes recorded
