History
=======

Version 0.5.2 - Unreleased
--------------------------

Version 0.5.1 - 2008-08-15
--------------------------

- Fixed a bug where a collector would have a ``Title`` property; this
  should be a method. [malthe]

- Added permissions to send, preview and manage newsletter. No upgrade
  steps required - just reinstall. By default - send and preview is 
  allowed to reviewer and manager role, manage newsletters for 
  managers only. [saily]

Version 0.5.0 - 2008-07-29
--------------------------

- Display a more user friendly error message when the user attempts to
  add duplicate subscriptions.
  [miziodel, nouri]

- List of subscribers can now be uploaded and downloaded in CSV format!
  [skatja]
  
- Depend on 0.3 or higher of plone.app.z3cform.
  [nouri]

Version 0.4.1 - 2008-07-23
--------------------------

- Fix ``RuntimeError: maximum recursion depth exceeded`` error in
  ``Module collective.dancing.browser.portlets.channelsubscribe, line
  253, in channel`` when displaying portlets that were created prior
  to 0.4b4.
  [nouri]

Version 0.4 - 2008-07-23
------------------------

New features
~~~~~~~~~~~~

- Added subject, confirmation_subject and forgot_secret_subject to
  vars of composer for easy customization.  Defaults are unchanged.
  [tmog]

- Added sender name, sender address and reply-to address as per
  composer configuration. Composer configuration is now available
  in the new Composers fieldset of the channel edit view.
  [tmog]

- Allow for easier subclassing of HTMLComposer.  The ``_vars()``
  method is now more generally applicable and easily to override.
  [nouri]

- Made adding thirdparty Channels possible. This works the same as
  with Collectors - you simply implement you custom channel and add
  a factory to the collective.dancing.channel.channels list.
  Preview and edit forms are now class methods on ManageChannelView
  to make it easier to subclass for your custom channels.
  [tmog]

- Pass on raw item as received from the collector to the composer
  (template).  Making use of this raw item will obviously bind the
  implementation of the composer to that of the collector.  However,
  it's considered useful for custom implementations that need total
  control and that know what collector they'll be using.

  This required an API change in IComposer.render(); the ``items``
  argument is now a list of 2-tuples instead of a list of formatted
  items.
  [nouri]

- Added Polish translation by Barbara Struk
  [naro]

- Added another type of scheduler: TimedScheduler.  This one allows to
  schedule a number of send-outs with an exact datetime.  Its main use
  is for the "send newsletter" form on a context where we want to
  specify a send-out date in the future.
  [nouri]

- The confirmation view will now confirm pending subscriptions to any
  channel.  This saves us from having to send a separate confirmation
  e-mail for every channel a user subscribes to.  This feature isn't
  used anywhere in S&D core at this point, but it's useful if you're
  writing custom subscription forms.
  [nouri]

- Added SubjectsCollectorBase template class that you can use to
  create a collector based on a vocabulary.  This vocabulary may come
  from anywhere, like from ATVocabularyManager or from the list of all
  subjects/tags available in your site.
  [nouri]

- Text fields will now per default not be included in the resulting
  message if there are no sibling collectors that produced items.
  E.g. if you have a heading text and a sibling topic collector, the
  heading won't appear if the topic didn't return any items.
  [nouri]

Bugfixes
~~~~~~~~

- Updated installation instructions to use the ``fake-zope-eggs``
  feature of the ``plone.recipe.zope2install`` instead of
  ``fakezope2eggs``.  Also, added ``skip-fake-eggs`` to accommodate
  latest changes in ``plone.z3cform``.

- Use ``CompositeQueue`` instead of the simple zc.queue.Queue for
  queueing and archiving mails.  This should help with memory bloat
  when there's a lot of messages in the queue.
  [nouri]

- Don't attempt to do any workflow transition with ATTopic items
  created in the collector; the default workflow will do fine, and we
  avoid errors when using workflows other than the default one.
  [nouri]

- Don't bail if no items are available for preview.
  [malthe]

Version 0.3 - 2008-06-03
------------------------

New features
~~~~~~~~~~~~

- Add translations to German.
  [saily]

- Added preview also to channel view.  This was previously only
  available for the "send as newsletter" action.
  [malthe]

- Refactored channels management view and the dedicated channel view.
  Big improvements to usability of the channel view.
  [malthe]
  
- Added capability to embed stylesheets in outgoing mail.  Right now,
  this is a simple text field that can be set on the channel's composer.
  We're now making use of the StoneAgeHTML library to embed styles in
  the individual HTML elements instead of providing styles in the
  ``<head>`` of the HTML document.  This gives us much better support
  with quirky e-mail clients out there.
  [malthe]

  In the future, we want to extend this to allow administrators to
  select themes for individual channels by browsing and selecting from a
  list of registered styles.

- Added Czech translation.
  [naro]

- Refactored ``mail.py`` to create ``MIMEMultipart`` based messages.
  This allows us to easily adapt the mail sending process to embed
  images and the like.
  [naro]

- Added a "reference collector".  This allows you to select individual
  portal items to be sent out, as opposed to items collected by a Smart
  Folder or the like.
  [malthe]

Bugfixes
~~~~~~~~

- S&D 0.3b2 introduced an incompatible change with channels created in
  0.3b1 and earlier.  I added a GenericSetup upgrade step to fix this.
  The relevant code is in the ``collective.dancing.upgrade`` module.

  If you're using a legacy database with channels that were created
  before version 0.3b2, you'll need to run this upgrade step, or
  you'll see this error::

    TypeError: ('object.__new__(HTMLComposer) is not safe, use persistent.Persistent.__new__()', <function _reconstructor at ...>, (<class 'collective.dancing.composer.HTMLComposer'>, <type 'object'>, None))

  Refer to the Upgrade_ section for details on how to run upgrades.
  [nouri]

- Add ``metadata.xml`` to make QuickInstaller happy with version
  numbers.
  [naro]

- Back to using checkboxes for multi selection instead of ``select``.
  [nouri]

- Make HTMLComposer and channel.composers persistent so that changes
  to template and composers are conveniently persisted.
  [nouri]

- Use ``zc.lockfile`` to lock the queue processing (sending out of mail)
  instead of excessively using ``transaction.commit()``, which caused
  massive ZODB bloat when a lot of messages were involved.
  [nouri]

- Use ``email.Header`` for message header formatting.  This allows for
  better internationalization in headers of outgoing e-mails.
  [naro]

- In-browser preview now displays what would really be sent out,
  i.e. after collectors and transforms could do their thing.  Before, it
  used to only display the context item as mail.
  [malthe]

Version 0.2 - 2008-05-06
------------------------

- Add an 'Already subscribed?" section to the "My subscriptions"
  page to retrieve your password.
  [nouri]

- added i18n:domain to browser/controlpanel-links.pt, removed extra quotes 
  from browser/channel.py, updated pot and danish translation
  [bartholdy]

- updated .pot and danish translation
  [bartholdy]

- apparently triplequoted strings do not get translated .. 
  this takes care of 
  https://bugs.launchpad.net/singing-dancing/+bug/218448
  [bartholdy]

- Don't use locale-dependent 'string.letters' when creating the
  ISalt utility.  This fixes
  https://bugs.launchpad.net/singing-dancing/+bug/217823
  [nouri]

- Extended portlet with optinal footertext
  [bartholdy]

- Added functionality to show a preview in the browser
  [malthe]
