TODO
----
See Ringo tracker on bitbucket for more feature requests!

The following list is only an incomplete reminder. Items here should be moved
to the tracker.

- Send notification mail when a new user registers a new account.
- Send notification mail when a new user confirms the new account.

0.17.1
======
- Added configuration for transifex
- Fixed error when opening News items.
- Init the form with the correct eval_url. Provide url_prefix when
  initialising the form.
- Show hint on errors in formdefinition in formeditor.
- #37: Further fixes.
- #86: Fixed extension specific view mapping.

0.17.0
======
- Improved overview and searching.
	- Added clientsided pageination function.
	- Added option to add a operators (<, <=, =>, >, ==, !=) to the
	  search. If the user has provided a opertors the search will use this
	  operator to do the search instead of a search based on a regular
	  expression. This is usefull for searches on dates.
- Improved exporting.
	- Added RecursiveRelation Exporter.
	- Added ODF Converter.
- Insert scaffold of a formdefinition when creating a new form.
- Added support for translations in extensions.
- Status messages are now rendered at the top of the page.
- Added option to set a custom header with logo above the navbar more easily.
- #37: Change ownership only for admins
- #48: Add support to drop columns in SQLite.
- #50: Change behavior of "click-seaerch-filter" in overviews
- #64: Better indication of current edit mode
- #67: No ISE on reading data from the import file. Show error dialog now.
- #68: Installation/Setup fails because of missing files
- #82: Migration of the database for the first module sometimes does not work
- #85: News can't be marked as read

0.16.3
======
- Important: Changed the way how the DBSession is setup. See ringo/__init__.py
  file how it is setup now and adapt you application.
- Added commands to generate SQL to restrict and unrestrict access to table of
  a modul on database level (only postgres)
- Fixes of loading Form and Overview configuration.
- Add escaping into the renderer

0.16.2
======
- Add function to load ringo extenstions.
- Changed logging in application (Removed and modified)

0.16.1
======
- Allow configuration of caching of pages and static content.
- Add various option to enhance cookie and session security.
- Set headers to enhance security according to
  http://ghaandeeonit.tumblr.com/post/65698553805/securing-your-pyramid-application

0.16.0
======
Refactoring of views:
* Seperation of views: Basic views (LCRUDIE) are now located under
  views.base.list ... views.base.export. Removed views/base.py.
* Moved REST logic into the corresponding new view modules.
* Moved methods and code from views.json into the new views.api and
  views.response modules
* views.api: Modul with method used by the client.
* views.respose: Modul with special Response objects.
* views.request: Modul with methods (handlers) with common logic for various views.
* views.helpers : Modul with helpers methods (getters) to get things like to forms or
  information from the request.

Refactoring of model:
* Removal of the request dependecy in the base model.
  Refactoring of the setup of the modules.
* Removal of several class methods like get_action_routename and get_item
  actions into lib.helpers and others.

Refactoring of lib:
* Splitted large lib/helpers.py into various files under lib/helpers.
* Splitted large lib/renderer.py into various files under lib/renderer.

HOWTO Upgrade:

* The following methods has been moved:
  - get_table_config -> lib/table.py
  - get_form_config -> lib/form.py
  - get_action_routename -> lib/helpers.py
  - get_item_list -> model/base.py
  - get_item_modul -> lib/helpers.py

  Search for these methods in all *.py and *.mako files and adapt the call.

0.15.2
======
* Use app title instead of app name as prefix in subject of notification mails.
* Fix urls in import, export dialogs. Use get_current_route_patch instead of
  URL (causes errors with SSL behind an reverse proxy)
* Fix import. Handle NULL values correct for integers.
* Fix handling NULL values in sorting.
* Use new formbar version 0.9.0. Fix some rules.

0.15.1
=======
Refactoring. Cleanup Model and try to get rid of pyramid specific elements
like the request.

* Removed __json__ method. JSON export is now completely handled in the
  Exporter (JSONResponse)

New:
* All Mails will have the application name in the subject.
* Add "nolink" Attribute to the DropdownRenderer.
* Added new TagFieldRenderer. Will only show tags which are associated to no
  or the items module.

Bugfixes:

* Translate options in dropdown lists.
* Translate headers in newslist.
* Fixed automatic translation in connection with mappings.
* Handle case if an attribute returns a BaseList as selected items in
  ListRenderer.

Changes:
* Text in News is now a Textarea.

0.15.0
=======
IMPORTANT: Application will need some work on application initialisation to
stay compatible with this release:

1. rename add_route to setup_modul
2. Move setup of modules into a "includeme" method.
3. Use config.include("appname") to call the includeme method.
4. setup_finished callback is removed.

- Changed the way how the routing is setup on application initialisation. Now
  iterate over all available modules from database and configure the routes
  for each modul instead hardcoding the configuration including importing the
  modules etc.
- Added new ringo-admin command.
- Removed old add-ringo-modul command.
- Automatic logout after a configurable time. Defaults to 1800sec. Some time
  before the loggout a warning dialog will be raised.
- Removed deprecated "ignore" filter for selections. Use must use filter now.
- Filter option and items Dropdowns and Listings (Listfield, Comments) on user permissions.
- Changed permission system. Add user roles to the user if the user is member
  of the items group. Added group roles additionally.
- Usergroups and Roles now have a description.
- Statemodel of forms only have two states now: Draft, Published
- Added support for Regular expressions in search (again). Now you can
  configure if the searchterm is a regular expression or not.
- Show userlisting in roles.
- #47: Added last_login column
- Changed caching. Replaced class based caching partially with request based
  caching if possible. Use new Cache object (lib/cache.py) for caching in
  general.

0.14.1
=======
- Fixes in the overview
	* Sorting on BaseItems is done based on their string representation.
	* Filter expressions are now escaped. This allows special chars in the
	  search. Therefor regular expressions are currently not supported
	  anymore. See #52.
	* Search is now case insesnsitive.
- Fix expandation of value in readonly dropdowns.
- New formencode version 0.8.1
- New registed users will have the user role in addition to the user group now.
- Implement formbar translation.

0.14.0
------
- Update to JQuery to 2.1.1
- Update to Bootstrap 3.1.1
- Changed permission system.
- Add boolean flag to choose if the group roles should be included in the user.get_roles()
- Changed building the principals of the user. Group roles will only be added
  to the user if he is actually member of the items group on permission check
- Add option to configure a default group on modul level which will be used on
  creation time as group if no special user default group is defined.
- Added information about the users profile to the user form.
- Allow refering to python properties in ListingFieldRenderer.
- Only render link in Dropdownfields if the user is actually allowed to view
  or update the linked item.
- Support alternative forms in the update view.
- Fix configuration of default sorting order in tableconfig (Was ignored).
  Changed default to asc.
- Add sorting to the ListfieldRenderer based on the tableconfig.
- Show number of items in the header of item overview pages.
- BaseLists are now iterable.
- Add label of the forms modul in the forms overview.

0.13.1
------
- Added option "not specified" to gender field in profile.
- Improved rendering of dropdownfield. Fixed emtpy field if there is no linked
  item.
- Worked on importer. Handle uuid values correct on import.
- Fix deleting profiles if a user is gets deleted.

0.13.0
------
- Improved Formbar form editing. Use new ACE (http://ace.c9.io/) JS based
  editor to edit the form definition. Requires new formbar lib (>= 0.7)
- Add preview tabs to the form editor, which allow to see a basic preview
  of the form. The preview does not support any dynamic now application
  specific renderers.
- Write the formbar specific CSS and JS on application start into the ringo
  static folder.
- Do not include the JS and CSS code of formbar into the document. Instead use
  to dynamically written CSS and JS files to reduce the size of the generated
  document.
- Improved password encryption. Replaced use of pythons built in hashlib.md5
  algorithm with the use of the passlib library
  (https://pythonhosted.org/passlib/index.html) for more secure password.

0.12.1
------
- Improved export of Blobform items. Instead of exporting the "data" attribute
  all field in the data field will be flattend and added to the toplevel of
  the export.
- Added Import and Export to the profiles module

0.12.0
------
- #12: Implemented basic version of bundled actions. Currently "Delete" and
  "Export" is supported.
- Modified export. Export now supports exporting more than one item (Bundled
  actions)

0.11.5
------
- Added more testcases
- Added new configuration variable "security.enable_csrf_check" in
  configuration files.
- Use default excel dialog on CSV export.

0.11.4
------
- #41: Cleanup of code. Remove init_model function calls, Removed initializedb
  script which was used to initialize the database for the application. Now
  alembic is used for this.
- Removed default ItemFactories, Removed default __unicode__ functions.
- Added more testcases

0.11.3
------
- Changed order of calls to add relations, handle events and saving the values
  in the item. Prevents errors when inheriting informations from linked items.
- Fixed setting max_age in auth_tkt cookie. Fixes error in IE10 for if running
  in pyramid > 1.4.5.
- Changed import. Import now allows importing multiple items. After the import
  has finished a result page is shown.
- Implemented import and export as CSV.

0.11.2
------
- Splitted requirements. Required packages for testing are now installed
  locally.
- Added unittests to test /lib/helpers
- Added unittests to test /views/index
- Enhanced Profile modul. Added gender field. Make some fields desired and required.
- Added "multiple" attribute to Listfield Renderer. Allows the restrict the
  selection of items to one item at once. Only implemented on client side.
- Add support for list elements while accessing a "." separated
  attributes in the __getattribute__ method of the BaseItem.
- Add relation from tags to modules to allow modul specifc keywords.
- Add tags to forms.
- Add comments to forms.
- Ported "filter" attribute of selectionfield renderer to the listfield renderer.

0.11.1
------
- #36: Another try to fix caching problems. This is another approach to
  5c152bd which tried to disable the caching at gets lost. (maybe a merge
  error)

0.11.0
------
- Add service under "rest/rule/evaluate" to evaluate rules. Service is used
  for client side evaluation of rules in the formulars.
- Provide the user roles as "_roles" value in the form. This value can be used
  to model role based rules in the form. Form needs a hidden field which takes
  the provided "_roles".
- Removed category from form form and table configuration. It is currently
  unused.
- Changed rendering of ringo specif dropdown.
- Add option to configure group and owner inhertinace on creating new
  instances in the Owned-Mixin.
- Deletion of Items now cascades to Logs, Comments, Versions and nested
  Elements.
- #18: Added some ringo artwork.
- #8: Make documentation available in the application

0.10.0
------
- Add new requirement of py3o.template library.
- Add Printtemplate modul. Printtemplates are ODT or ODS documents which are
  used as templates for generating nice looking documents. On processing the
  template placeholders in the template will be replaced by values of the
  item. The template can include basic python expressions. E.g to iterate over
  lists.
- Add Printable Mixin. Inheriting from this mixin will add a print action to
  the item.
- Fixes on permission checks. Add button to add new items in listing only if
  the user actually has permission to add new items.
- Add "showsearch", "hideadd", "nolinks" attributes to listfield renderer to
  enhance configuration of rendering.
- Render permissions of a role as FieldList.
- Add TodolistRenderer. Render todos in the home view.

0.9.2
-----
- Add Versioned mixin. This mixin can be used to store different versions of
  an item. On each update of the item the serialized values of the item will
  be saved in the version table. The versions are later used to show
  differences between the current and a given prior version in the form.
- Add get_values function to the BaseItem to return a dictionary containing
  all values of the item. Optionally the items can be serialized (this
  is a very simple serialisation).
- Reorganised automatic logging and changing states. The former version was
  implemented as update handler in the mixin classes and was based
  on the SQLAlchemy "history" functionallity. Unfortunately this history
  wasn't as much reliable as expected in some corner cases. The update handler
  was removed and changing the states and logging are now implemented directly
  in the save method of the item.

0.9.1
-----
- Replaced route_url with route_path.
- Fixed rendering of links in the dropdown renderer. Consider user permission
  on link generation (read/update).
- Added options to the Table renderer to configure the responsive behaviour of
  table columns. You can now define which columns should be visible on which
  screenwidth. Defaults to show only the first column.
- Workded on Formeditor. Implemented selecting a form when creating new
  (blobform) items.
- Introduced warnings (formbar 393:bbd7a5192e29). Validate the item on loading
  to generate warning.
- Handlers in the statemachine now get the transition as additional parameter.
  This is usefull das the transformation gives access to the state,
  statemachine and optionally the request.
- Use sorting configuration from table config in DTLists.
- Added paginated DTList.
- Check if the user is still allowed to edit the item after he edited it
  (Statechange). If not call alternative read URL.
- Improved performance. Do some caching here and there.

0.9.0
-----
- Added comment modul
- Added tags modul
- Added todo modul
- Added forms module
	- Write save method for items like the save method of formbar.
	  Overwrite the method in Blobforms.
	- Overwrite get_attr, get_value method in blobform to handle getting
	  values from the datafield.
	- Think about how to handle multiple forms for one item. Currently
	  this is hardcoded on itemlevel which form should be used.
- Added UUID field for each BaseItem
- Implement simple Import and Export. Only single items. No relations.
	- Added JSON Importer and Exporter
	- Added import and export functions in the view for ringo modules
	  except for the modul modul
- Small layout fixes (flash messages)
- Modules can now be placed in the "user menu" in the top right. Improved
  layout of this menu with textual headers.
- Some code cleanup
- Start using "invoke" command for different tasks like testing or building
  the documentation.

0.8.1
-----
- Bugfixes for API Change: BaseLists are not initialized with request instead of request.db
- Improved documentation
- Some fixes in the basic scaffold. Improved alembic integration.

0.8.0
-----
- Added log modul
- Added statemachines
- Added simple mechanism to call handlers for certain events in the model.
  This is currently used to:
	- Update the updated attribute on every change of a item which has the
	  meta mixin.
	- Create a simple log entry on updating or creating a item.
- Worked on caching the result of SQL queries to improbe the performance.
- API Change: BaseLists are not initialized with request instead of request.db
- Added alembic folders to basic scaffold
- Worked on documentation

0.7.0
-----
- Added news modul
- Use "width" from tableconfig also in DTListings.
- Rows in DTLists are now clickable to if the user is allowed to update the
  item then the update action will be called on click. Else call the read action.
- Fix URLs for the ReST-Api to match basically the typical URL Schema for CRUD
  actions:

    * GET /items - Retrieves a list of items
    * GET /items/12 - Retrieves a specific item
    * POST /items - Creates a new item
    * PUT /items/12 - Updates item #12
    * PATCH /items/12 - Partially updates item #12
    * DELETE /items/12 - Deletes #12

  Note, that not all actions are actually implemented yet, but for now the url
  schema has beed adapted.

0.6.4
-----
- Improved Layout
  - Use Bootstrap 3
  - Use new formbar lib (bootstrap 3 compatible)
  - Optimized space. Removed tabs. Added advanved menu to the context menu for
    accessing other content which was formerly placed in tabs.
- Only show links for registering users or password reminders if the mail
  system is configured and registering and reminders are enabled in the auth
  system. See ini file. Defaults to not enabled.
- Implemented a message library. Currently it is used to generate based on
  mako templating and send mails.
- Added option for users to change their password.

0.6.3
-----
- Improved authorisation system. Make building ACL more simple and robust.
- Implemented configurable str representation of items in the modul setting.
- Show the item representation string on every update and read page.
- Added new date related helper functions.
- Delete usersettings too if the user gets deleted.
- Added caching on modules, table and form configs to improve the performance.
- Introduced new "form" GET parameter to optionally change the default
  rendered.
- Listings
    - Fixed value expandation in the listings.
    - Added option to List to do the sorted on the expanded or raw value.
- ListingFieldRenderer
      When using listing in context with Nested Objects to build
      hirachies then take care to only show valid items in the list to
      prevent building broken hirachies.
    - Handle "onlylinked" config var in FieldListRenderer.
    - Handle "ignore" config var in FieldListRenderer.

0.6.2
-----
- Fixed user form configuration which leads to an error in password generation
  while creating a new user.
- Changed authorisation. Now access to items are also granted if the user is
  member of the items group.
- Changed authorisation in Itemlists. Only items are included in the overview
  if the user has access to read the item.
- Updated translations (missing translations for file and appointment modul)
- Changed imports of models. Now use specific import_modul function to import
  models in the application to be able to import overwritten clazzes in other
  applications.
- Added CSRF protection on POST request. On every POST request now a special
  csrf token is checked. If check fails a Authorisation error is thrown.
- Added tab to change the ownership informatio in update and read forms if
  ownership information is available.
- Removed "transform" funtion from lists.
- Added new alembic scripts to initialise the database.

0.6.1
-----
- Bugfixe on File modul initialisation (missing name)
- Added "values" GET param for views. Can be used to prefill forms with given
  values.
- Improved rendering of the ListField Renderer. (Added label, Use new "values"
  parameter)

0.6.0
-----
- Added File module

0.5.1
-----
- Added support for alembic for database migrations.

0.5.0
-----
- Added Appointment module
- Added Renderer for a query DataTable Renderer.
- Added Renderer for ListFields. ListFields are Basically listings of related
  items in tabular from providing a checkbox to select and deselect items.
  Selected items will get linked.
- Added "backurl" GET parameter. This parameter can be used to define a URL
  which should be called instead of the default redirect action after create,
  update or delete succeeds. The parameter is saved in a session.
- Added more behave tests (now 42% code coverage).

0.4.1
-----
- Added a Ringo specific renderer for dropdown lists which add a small link
  next to the label of the dropdownlist.
- Added Behaviour Driven Test infrastructure based on "behave"
- Small bugfixes.

0.4.0
-----
- Added REST-full service. The service is reachable for all modules on the
  known url with the prefix "rest". Eg rest/users/list. Using the interface
  requires Authorisation and Authentification which needs to be supplied.
- Added "Nested" Mixin class to allow nested items.
- When a form has multiple pages the currently selected page is now saved in
  the user session. Needs recent formbar version.
- Use new get_formbar_js method in inject js code needed for formbar. Neededs
  recent formbar lib.
- Items with the MetaMixin will have a default created und updated date of
  utcnow now.
- #25: Added support for custom renderes. Renderers can now be defined and
  provied to the view functions. The renderer must be derived from the Formbar
  FieldRenderer) The view functions will give the renderer to the formbar lib.
  Need a recent Formbar version (>=0.3.0)

0.3.2
-----
i18n Support:
- User custom extractor from formbar for translation string in XML form
  configuration. No need to mark strings in the configurations as
  translatable.
- Removed lingua requirement.
- Added support for translations in the basic scaffold.

0.3.1
-----
Search:
- Added a new TableConfig class. This clazz provides an interface to a JSON
  file which is used to configure various aspects to the rendering of the
  overview tables. This new configuration directive will replace to old
  _table_fields configuration attribute.
- #26: Expand values of relations in the overview from form configuration.
- #27: Save current sorting in the session.
- #28: Save sorting together with the search query in the saved searches.

i18n Support:
- #23: I18n Support in renderes. Added more translations.
- Added lingua as requirement. Needed for message extraction for i18n Support
- Marked form configurations as translateable.
- Added support for translating forms. Requires formbar >= 0.2.1
- Added support to translate headers in the overview.

Misc:
- #19: Login should be in a Popup window

0.3.0
-----

- #15: Implement Search
- Enabled search by clicking on the value in colums.
- Added table to save usersettings (DB change!)
- Enable saving search queries in the usersettings.

- Added dogpile.cache dependency because of caching in sqlalchemy.
- Enabled basic caching of SQL queries.

0.2.2
-----

- Some improvement in Layout. Make header more compact to not waste to much
  space
- Create an empty "forms" dir under views for the basic scaffold. Fixes error
  on creating the form.xml files when adding a new modul.
- Improved add_<<app>>_modul command. Fixed modul (re) initialisation. It the
  modul initialisation does not happen on recreating again the database.
- Fix get_path function. Path is now relativ to the application (was relativ
  to Ringo)
- #10: Add "visible" flag to moduls. Moduls can now be configured in which
  menu to display the modul. (DB change!)
- Added new field "clazzpath" to the modul. Needed only internal for dynmic
  imports on permission checks. (DB change!)
- Need formbar in version > 0.1 to be able to render selection fields.

0.2.1
-----

- Improved documentation
- Added a simple request history (needed for #7)
- #1: Error on getting roles while authorisation when user is not logged in
- #2: Put some usefull content on the default index page
- #3: Set application title in the page header
- #4: Add version info page
- #5: Add about page
- #6: Add contact page
- #7: Add dialogs for errors (404, 403)
- #9: Cleanup and structure css
- #17: Hide checkboxes in overviews if bundled actions are not enabled
- #20: Fix layout of flash messages
- #21: Complete german translation

0.2
---

First more or less version which includes all basic functionallity.

- Added basic scaffold
- Added "add_modul" command to add boilerplate code for new moduls.

0.1
---

- Basic model initialisation
- Basic page layout
- Added authentification

0.0
---

-  Initial version
