Introduction
============

Provides form to update object properties via ``Plone`` UI.


Quick Intro
-----------

* it replicates ZMI ``/manage_propertiesForm`` form in ``Plone`` UI
* it's like ``collective.interfaces`` package to manage zope interfaces via
  ``Plone`` but to manage ``PropertyManager`` based properties
* it uses ``z3c.form`` library to generate CRUD form
* it is tested in ``Plone 3`` (``Plone 4`` to be checked soon)
* it's installable via ``portal quickinstaller`` tool, for detailed instructions
  on how to add it to your zope instance, please, check ``docs/INSTALL.txt``
  file


Property attributes
-------------------

``IPropertyManager`` interface provides properties with the next list of
metadata:

* ``id``: required
* ``type``: required
* ``select_variable``: optional; for selection and multiple selection property
  types to provide the name of a property or method which returns a list of
  strings from which the selection(s) can be chosen
* ``mode``: optional; must contain 0 or more chars from the set 'w', 'd'; 'w' -
  value may be changed by user, 'd' - user can delete property, '' - property
  and it's value may be shown in property listings, but it is read-only and
  may not be deleted; without mode key property is assumed to have the mode 'wd'
  (writeable and deletable)
* ``label``: optional
* ``description``: optional


Property types
--------------

Default property manager property types are listed below. All of them are
planned to be supported by ``collective.properties`` management form (see
``TODO`` section below for what's not implemented yet):

* ``float`` - floating number
* ``int`` - integer
* ``long`` - long integer
* ``string`` - utf-8 encoded string
* ``lines`` - list of utf-8 encoded strings
* ``text`` - utf-8 encoded text (string with line breaks)
* ``date`` - Zope2 DateTime object
* ``tokens`` - list of utf-8 encoded strings, entered as text line and split by
  space characters afterwards
* ``selection`` - utf-8 encoded string, the only difference between string
  property type is that ``selection`` property values is selected from list of
  available options, this property type owns extra item in the property
  dictionary, 'select_variable' which provides the name of a property or method;
  note: make sure your vocabulary doesn't include unicode strings, only
  integers, floats, utf-8 encoded strings and booleans, otherwise old
  PropertyManager form breaks
  which returns a list of strings from which the selection can be chosen.
* ``multiple selection`` - list of utf-8 encoded strings, these strings are also
  selected from list of available options as described above in ``selection``
  property type


Compatibility
-------------

It's been tested only with Plone 3 so far.


Notes
-----

``Property Manager`` interface defines some reserved strings that are prohibited
to be used as property ids. It provides validation method which is also used by
collective.properties management form. That's why it's secure to install this
package in ``Plone`` site and let non-tech content manager use it's properties
form.

Not all standard properties are handled yet. For details, please, see ``TODO``
section below.

``collective.properties`` form simply skips property types that it doesn't
know how to handle. So to manage them you still need to use standard
``/manage_propertiesForm`` form.

Form that this package provides to manage properties is fully compatible with
old ``Property Manager`` form (``/manage_propertiesForm``) so it's possible to
manage properties on both of them at the same time, and there won't be any
issues with string encodings, etc... ``collective.properties`` form saves
data in the same format original form does.
