.. _upgrade-to-3.1:

#################
3.1 release notes
#################

*****************
What's new in 3.1
*****************

Switch from MPTT to MP
======================

Since django CMS 2.0 we relied on MPTT (Modified Preorder Tree Traversal) for efficiently handling tree structures in the DB.
Over the years it proved that MPTT was not fast enough for big tree operations (>1000 pages) and regularly
the tree got corrupted because of transactional errors.

In 3.1 we replaced MPTT for MP (Materialized Path). MP is more efficient and has more error resistance then MPTT.
It should make the whole django CMS experience way better, faster and reliable.

Before upgrading
----------------

Be sure to run ``manage.py cms fix-mptt`` before you upgrade.


Dropped support for Django 1.4 and 1.5
======================================

Starting from version 3.1 the supported Django versions are 1.6 and 1.7


********************
Incompatible changes
********************

Migrations moved
================

Migrations packages has been renamed to the standard layout:

 * Django 1.7 migrations are now into standard ``cms.migrations`` and ``menus.migrations`` packages
 * South migrations are now in ``cms.south_migrations`` and ``menus.south_migrations`` packages

South 1.0.2 is now required to correctly handle the above layout; if you are upgrading from Django 1.7 / django CMS 3.0.x,
please remove the old migration path from ``MIGRATION_MODULES`` settings.

Structure mode permission
=========================

The new "**Can use Structure mode**" permission has been added. Without this permission, a
non-superuser cannot enter structure mode anymore: this allow more strict workflow which only
enable content update for certain users.
This change include data migration
that adds the new permission to any staff user or group with
`cms.change_page` permission; you can then later change this according to your permission
model and workflow.
Be aware that existing users cannot be migrated if running the django CMS
migrations for the first time in the project, because permissions are not already in place;
in this case users must be given the new permission manually.