= django-cms-tools

Miscellaneous tools/helpers for django CMS.

Look also at the siblings project: [[https://github.com/jedie/django-tools|django-tools]] (Tools/helpers around Django).

| {{https://travis-ci.org/jedie/django-cms-tools.svg|Build Status on travis-ci.org}} | [[https://travis-ci.org/jedie/django-cms-tools/|travis-ci.org/jedie/django-cms-tools]] |
| {{https://codecov.io/gh/jedie/django-cms-tools/branch/master/graph/badge.svg|Coverage Status on codecov.io}} | [[https://codecov.io/gh/jedie/django-cms-tools|codecov.io/gh/jedie/django-tools]] |
| {{https://coveralls.io/repos/jedie/django-cms-tools/badge.svg|Coverage Status on coveralls.io}} | [[https://coveralls.io/r/jedie/django-cms-tools|coveralls.io/r/jedie/django-cms-tools]] |
| {{https://landscape.io/github/jedie/django-cms-tools/master/landscape.svg|Status on landscape.io}} | [[https://landscape.io/github/jedie/django-cms-tools/master|landscape.io/github/jedie/django-cms-tools/master]] |


== existing stuff

=== Django-CMS plugins

==== page anchor menu

Add a anchor menu to a CMS page.
More info in: [[https://github.com/jedie/django-cms-tools/tree/master/django_cms_tools/plugin_anchor_menu#readme|django_cms_tools/plugin_anchor_menu/README.creole]]

==== landing page

A app to create landing pages.
More info in: [[https://github.com/jedie/django-cms-tools/tree/master/django_cms_tools/plugin_landing_page#readme|django_cms_tools/plugin_landing_page/README.creole]]

=== test fixture creation

==== django_cms_tools.fixtures.pages

Helper for creating Django CMS pages in test fixtures:

Class //django_cms_tools.fixtures.pages.//**CmsPageCreator** can be used for create normal/plugin CMS pages.
Inherit from the class and overwrite attributes/methods for your need ;)
Example, look into the Test code.

Source: [[https://github.com/jedie/django-cms-tools/blob/master/django_cms_tools/fixtures/pages.py|django_cms_tools/fixtures/pages.py]]
Test/Example: [[https://github.com/jedie/django-cms-tools/blob/master/tests/test_fixtures_pages.py|/tests/test_fixtures_pages.py]]

==== create_cms_index_pages

Create CMS home page in all existing languages ({{{settings.LANGUAGES}}}) and fill placeholder with TextPlugin, use:

* //django_cms_tools.fixtures.pages.//**create_cms_index_pages**

==== create_cms_plugin_page

Create CMS plugin page in all existing languages ({{{settings.LANGUAGES}}}) and add a link to the index page.

* //django_cms_tools.fixtures.pages.//**create_cms_plugin_page**


=== django filer tools *experimental*

Activate by change your settings.py, e.g.:

{{{
INSTALLED_APPS = [
    ...
    'django_cms_tools.filer_tools',
    ...
]
}}}


==== 'image info' management command

Display information about the number of existing, missing and ignored images. And a summary about all used images.
usage:
{{{
$ ./manage.py image_info

34 items - foo.Bar
34 instanced checked:
   0 exist    0 missing   34 ignored - foo.BarModel.meta_image
  34 exist    0 missing    0 ignored - foo.BarModel.filer_overview_image

...

total:
	existing images..: 6171
	missing images...: 0
-------------------------------------------------------------------------------
Collect all filer IDs...
File: 2 entries
Image: 2 entries
Information about File:
	Total entry count: 8042 entries.
	Used entry count: 2 entries.
	Total size: 13.8 GB
	Used size: 997.5 KB
Information about Image:
	Total entry count: 6993 entries.
	Used entry count: 2 entries.
	Total size: 13.7 GB
	Used size: 997.5 KB
(Note: 'File' contains 'Image' ;)
}}}


==== 'replace broken' management command

Replace all not existing files files with a given filer ID.

e.g.: You would like to make a clone of a existing installation, but without to move the real files:

# make a DB dump on the source system
# insert the DB dump the the cloned system
# log into django admin of the new cloned version
# upload a "dummy.jpg" filer image
# write down the filer image ID (e.g.: 123)
# start: {{{$ ./manage.py replace_broken 123}}}


=== 'template_info' management command

Activate e.g.:

{{{
INSTALLED_APPS = [
    ...
    'django_cms_tools',
    ...
]
}}}
It looks like:
{{{
$ ./manage.py template_info

There are 3 public pages:
pk:1 /en/                                     /foo/homepage.html
pk:2 /en/foo/                                 INHERIT
pk:3 /en/foo/bar/                             INHERIT
}}}


=== 'cms_plugin_info' management command

Activate e.g.:

{{{
INSTALLED_APPS = [
    ...
    'django_cms_tools',
    ...
]
}}}
It looks like:
{{{
$ ./manage.py cms_plugin_info

There are 4 CMS plugins:
'Django CMS Tools Test'
    * RelatedPlugin (Related Plugin)
'Generic'
    * PlaceholderPlugin (Placeholder)
    * AliasPlugin (Alias)
    * TextPlugin (Text)
}}}


== run test project

{{{
.../django-cms-tools$ ./run_test_project_dev_server.sh
}}}

or:

{{{
.../django-cms-tools$ cd django_cms_tools_test_project/
.../django-cms-tools/django_cms_tools_test_project$ ./manage.py run_test_project_dev_server
}}}


== running tests

Run all tests in all environment combinations via tox:

{{{
$ python3 setup.py tox
}}}

Run all tests in current environment via pytest:

{{{
$ python3 setup.py test
}}}


== Django compatibility

|= django-cms-tools |= Django CMS |= django version |= python         |
| >=v0.6            | 3.4.x       | v1.11           | 3.5, 3.6, pypy3 |
| >=v0.5.1          | 3.4.x       | 1.8, v1.11      | 3.5, 3.6, pypy3 |
| v0.4.0            |             | 1.8             | 2.7, 3.5, 3.6   |
| v0.1.x            |             | 1.8             | 2.7, 3.4, 3.5   |

Currently Django CMS v3.5 is not supported, yet.
It's on the TODO, see: [[https://github.com/jedie/django-cms-tools/issues/1|issues #1]]
(See also combinations in [[https://github.com/jedie/django-cms-tools/blob/master/.travis.yml|.travis.yml]] and [[https://github.com/jedie/django-cms-tools/blob/master/tox.ini|tox.ini]])

== TODO:

 * Add tests for 'filer commands'
 * Support Django CMS v3.5 and run tests against these versions.
 * Support Django v2.0 and run tests against these versions.


== history

* *dev* - [[https://github.com/jedie/django-cms-tools/compare/v0.6.4...master|compare v0.6.4...master]]
* v0.6.4 - 06.03.2018 - [[https://github.com/jedie/django-cms-tools/compare/v0.6.3...v0.6.4|compare v0.6.3...v0.6.4]]
** Update {{{django_cms_tools.fixtures.pages.DummyPageGenerator}}} to changes API
* v0.6.3 - 23.02.2018 - [[https://github.com/jedie/django-cms-tools/compare/v0.6.2...v0.6.3|compare v0.6.2...v0.6.3]]
** Rename landing page and anchor menu plugins via django.apps.AppConfig
** Update publisher itegration tests
* v0.6.2 - 22.02.2018 - [[https://github.com/jedie/django-cms-tools/compare/v0.6.1...v0.6.2|compare v0.6.1...v0.6.2]]
** Bugfix packaging: Include template files
* v0.6.1 - 22.02.2018 - [[https://github.com/jedie/django-cms-tools/compare/v0.6.0...v0.6.1|compare v0.6.0...v0.6.1]]
** Update "landing page" plugin to new publisher API
* v0.6.0 - 20.02.2018 - [[https://github.com/jedie/django-cms-tools/compare/v0.5.2...v0.6.0|compare v0.5.2...v0.6.0]]
** remove test runs with Django v1.8
** NEW: Django-CMS plugin for create "landing pages"
** NEW: Django-CMS plugin for build a page anchor menu
** NEW: {{{./manage.py cms_plugin_info}}} to generate a list of all registered Django CMS plugins
* v0.5.2 - 10.01.2018 - [[https://github.com/jedie/django-cms-tools/compare/v0.5.1...v0.5.2|compare v0.5.1...v0.5.2]]
** enhance and bugfix 'replace_broken' command
* v0.5.1 - 21.12.2017 - [[https://github.com/jedie/django-cms-tools/compare/v0.5.0...v0.5.1|compare v0.5.0...v0.5.1]]
** refactor travis/tox/pytest/coverage stuff
** Tests can be run via {{{python3 setup.py tox}}} and/or {{{python3 setup.py test}}}
** Test also with pypy3 on Travis CI.
* v0.5.0 - 19.12.2017 - [[https://github.com/jedie/django-cms-tools/compare/v0.4.0...v0.5.0|compare v0.4.0...v0.5.0]]
** Skip official support for python v2 (remove from text matrix)
** NEW: {{{./manage.py template_info}}}
** NEW: {{{./manage.py cms_page_info}}}
** CmsPageCreator API changed:
*** the string {{{CmsPageCreator.placeholder_slot}}} changed to iterable {{{CmsPageCreator.placeholder_slots}}}
*** add {{{placeholder}}} argument in {{{CmsPageCreator.get_dummy_text()}}} and {{{CmsPageCreator.get_add_plugin_kwargs()}}}
*** Bugfix: use always drafts as parent pages (see also: https://github.com/divio/django-cms/pull/6126 )
*** add unittests
* v0.4.0 - 18.09.2017 - [[https://github.com/jedie/django-cms-tools/compare/v0.3.2...v0.4.0|compare v0.3.2...v0.4.0]]
** NEW: [[https://github.com/jedie/django-cms-tools/blob/master/django_cms_tools/models.py|django_cms_tools.models.RelatedPluginModelMixin]]
** NEW: [[https://github.com/jedie/django-cms-tools/blob/master/django_cms_tools/fixtures/pages.py|DummyPageGenerator]]
** NEW: [[https://github.com/jedie/django-cms-tools/blob/master/django_cms_tools/permissions.py|ModelPermissionMixin]]
** misc updates/changes
* v0.3.2 - 22.05.2017 - [[https://github.com/jedie/django-cms-tools/compare/v0.3.1...v0.3.2|compare v0.3.1...v0.3.2]]
** Bugfix in {{{{% el_pagination_placeholder %}}}} and render all plugins after the tag.
* v0.3.1 - 04.05.2017 - [[https://github.com/jedie/django-cms-tools/compare/v0.3.0...v0.3.1|compare v0.3.0...v0.3.1]]
** Bugfix in {{{CmsPageCreator}}}: evaluate lazy "language name" translation in the right language (e.g.: e.g.: {{{settings.LANGUAGE_CODE}}} is not "en")
* v0.3.0 - 27.04.2017 - [[https://github.com/jedie/django-cms-tools/compare/v0.2.0...v0.3.0|compare v0.2.0...v0.3.0]]
** NEW: //django_cms_tools.fixtures.pages.//**CmsPageCreator** for creating Django CMS pages in test fixtures
* v0.2.0 - 10.04.2017 - [[https://github.com/jedie/django-cms-tools/compare/v0.1.2...v0.2.0|compare v0.1.2...v0.2.0]]
** Experimental: Filer management commands: 'image_info' and 'replace_broken'
* v0.1.2 - 28.03.2017 - [[https://github.com/jedie/django-cms-tools/compare/v0.1.1...v0.1.2|compare v0.1.1...v0.1.2]]
** Change: create pages with translated language name
* v0.1.1 - 27.03.2017 - [[https://github.com/jedie/django-cms-tools/compare/v0.1.0...v0.1.1|compare v0.1.0...v0.1.1]]
** Fix pypi package stuff
* v0.1.0 - 27.03.2017
** NEW: create_cms_index_pages
** NEW: create_cms_plugin_page


== links ==

| Homepage   | http://github.com/jedie/django-cms-tools
| PyPi       | https://pypi.org/project/django-cms-tools/


== donation ==

* [[https://www.paypal.me/JensDiemer|paypal.me/JensDiemer]]
* [[https://flattr.com/submit/auto?uid=jedie&url=https%3A%2F%2Fgithub.com%2Fjedie%2Fdjango-cms-tools%2F|Flattr This!]]
* Send [[http://www.bitcoin.org/|Bitcoins]] to [[https://blockexplorer.com/address/1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F|1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F]]
