#################
3.0 release notes
#################

*****************
What's new in 3.0
*****************


.. _upgrade-to-3.0:

.. warning:: Upgrading from previous versions

    3.0 introduces some changes that **require** action if you are upgrading
    from a previous version.


New Frontend Editing
====================

django CMS 3.0 introduces a new Frontend Editing system as well as a customizable
django admin skin.

In the new system, Placeholders and their Plugins are no longer managed in the
Admin site, but only from the Frontend.

In addition, the system now offer two editing views: 

* **content** view, for editing the configuration and content of plugins
* **structure** view, in which plugins can be added and rearranged


New Toolbar
===========

The Toolbar's code has been simplified and its appearance refreshed. 

The Toolbar is now a more consistent management tool for adding and changing
objects in a django CMS-based system. See :doc:`../extending_cms/toolbar`.

Experimental Python 3.3 support
===============================

We've added experimental support for Python 3.3. Support for Python 2.5 has
been dropped. 
 

Better multilingual editing
===========================

Improvements in the environment django CMS provides for managing a multi-lingual site include:

* a built-in language chooser for languages that are not public yet 
* configurable behaviour of the Admin site's language when switching between
  languages of edited content


CMS_SEO_FIELDS
==============

**Removed**, along with the SEO fieldset in admin. 

* ``meta_description`` field's max_length is now 155 for optimal Google integration.
* ``page_title`` is default on top
* ``meta_keywords`` field has been removed, as it no longer serves any purpose
            

CMS_MENU_TITLE_OVERWRITE
========================

New default is ``True``.


Plugin fallback languages
=========================

It's now possible to specify fallback languages for a placeholder if the placeholder
is empty for the current language.
This must be activated in :setting:`CMS_PLACEHOLDER_CONF` per placeholder.
Default to ``False`` to maintain pre-3.0 behavior.

language_chooser
================

The ``language_chooser`` templatetag now only displays languages that are
public. Use the toolbar language chooser to change the language to non-public
languages.
       

Undo and Redo
=============

If you have ``django-reversion`` installed you now have **undo** and **redo**
options available directly in the toolbar. These can now revert *plugin*
content as well as *page* content.


show_editable_page_title
========================

New ``show_editable_page_title`` to edit page title from the frontend.
                 

Plugins removed
===============

We have removed plugins from the core. This is not because you are not
expected to use them, but because django CMS should not impose unnecessary
choices about what to install upon its adopters.

The most significant of these removals is ``cms.plugins.text``.

We provide ``djangocms-text-ckeditor``, a CKEditor-based Text Plugin. It's
available from https://github.com/djangocms-text-ckeditor. You may of course
use your preferred editor; others are available.  
                        

Plugin Context Processors take a new argument
=============================================

:ref:`plugin-context-processors` have had an argument added so that the rest
of the context is available to them. So if you have existing Plugin Context
Processors you will need to change their function signature to add the extra
argument.

Apphooks
========

Apphooks have moved from the title to the page model. This means there are no
more separate apphooks possible per language. A new namespace field has been
added.

.. note::
    The reverse id is not used for the namespace anymore.
    If you used namespaced apphooks before, be sure to update your pages and fill out the namespace fields.

If you use apphook apps with ``app_name`` for app namespaces be sure to fill out the namespace field as of now
it is required to have a namespace defined if you use app namespaces.

``request.current_app`` has been removed. If you relied on this, use the following
code instead in your views::

    def my_view(request):
      current_app = resolve(request.path).namespace
      context = RequestContext(request, current_app=current_app)
      return render_to_response("my_templace.html", context_instance=context)



Details can be found here: :ref:`multi_apphook`

PlaceholderAdmin
================

PlaceholderAdmin has no language tabs anymore and the plugin editor is gone. The plugin API has changed
and is now more consistent. PageAdmin uses the same API as PlaceholderAdmin now. If your APP talked with
the Plugin API directly be sure to read the code and the changed parameters.
If you use PlaceholderFields you still need the PlaceholderAdmin as it delivers the API for editing the
plugins and the placeholders.

The workflow in the future should look like this:

1. Create new Model Instances via Toolbar entry or via admin.
2. Go to the view that represents the model instance and add content via frontend editing.

Twitter Plugin removed
======================

Twitter disabled V1 of their API. We removed the twitter plugin because of this.
For an alternative have a look at this plugins:

https://github.com/nephila/djangocms_twitter
https://github.com/changer/cmsplugin-twitter


