Add feature change "?edit" variable (and "?edit_off", "?build") to custom variable (eq. "?admin_on") in project started with Django-CMS.
Replace all static urls "?edit", "?edit_off", "?build" to changeable variables "?CMS_ADMIN_TOOLBAR__EDIT_ON", "?CMS_ADMIN_TOOLBAR__EDIT_OFF", "?CMS_ADMIN_TOOLBAR__BUILD".
Refactoring: change variables names for more good understanding.
Refactoring: add settings for "CMS TOOLBAR" urls to "get_cms_setting()".
Refactoring: replace getting settings for "CMS TOOLBAR" urls from "settings.py" to "get_cms_setting()".
Fix: import "get_cms_setting".
Fix: string format.
Better docs documenting.
Moved LogEntry query into try/except block.
Add notice to docs.
Cleaned up ApphookPool class:

- reordered class methods to better reflect class functionality
- method register(self, app) now doesn't check class supplied by user, just to see it's already registered
- cleaned self.block_register True/False assignments in discover_apps()
- removed discovered check from discover_apps since it has nothig to do with app discovery as such
- changed some exception messages
Fixed typo in get_apphooks() method
Clean up utils.page_resolver logic

get_page_queryset_from_path now always returns a queryset, previously it
was capable of returning a PageQuerySet, Page model or None, which both
the callers had to hack around. Also simplified the logic internally,
while taking care to preserve behavior:

* Querying for "home" is unnecessary if path is provided
* Handling IndexError/DoesNotExist is unnecessary, now we return a
  queryset with 0...1 results
* get_page_from_path docstring lies about "Raises exceptions is page
  does not exist"
Avoid query for uncommon case where CMS roots are not visible

This saves a database query from every CMS page load. Originally
introduced in commit 61f56dd14751bab4c0232a62afb87555216a67f4 with no
rationale. These are the edge cases where it makes a difference, as far
as I can tell:

* It forbids seeing published subpages when all roots are unpublished.
  But why the special treatment of roots and not caring about other
  intermediary levels? And it checks for any roots regardless of
  placement, even if it's in a different hierarchy.
* It prevents seeing a draft version of a page if there are no draft
  versions of any root pages in the site. If that's at all possible, it
  seems like a bug?
More changes in ApphookPool class
Fixed: SyntaxError: invalid syntax
Change confirmation message to reflect current CMS

In my tests, publishing an unpublished page that is not active in the menu is *not* set active in the menu when you published (thankfully!), so this confirmation message appears out of date.
catch ValueError from log.get_edited_object in cms.admin.pageadmin.PageAdmin.resolve
Cast site_id to int
Sorry, no more long in Python 3