Package: wagtailapproval
Wagtail Approval################This is a wagtail plugin for approval pipelines.What is this?=============Essentially, this is a plugin for defining and enforcing flows of approval andediting.  You can set up arbitrary "steps" in the flow, each step owning a group(and all the users which belong to the group).  When a user creates a relevantobject, their step will catch it and take ownership of it.  When a user's stepowns an object, that user can then approve or reject objects as relevant.  Stepscan be made to make all of their owned objects private, so that items can bekept in an unpublished state until they are fully edited and approved (note that"Published" takes a different meaning here than Wagtail's own).  What this doesas far as pages are concerned could be replicated by creating a "creation" pagethat is private and allowing approval and editing users to move pages intospecific areas, but that is messy and prone to failure.  This takes thatprocess, avoids all the moving pieces, and puts the whole thing on rails.Does it work out of the box?============================Wagtail Approval works out of the box for base wagtail (more specifically, itworks for Images, Documents, and Pages).  It can be extended to support anyother collectable type you wish, as long as that type properly implementspermissions for their collections (ie, respects the ``add``, ``change``, and``delete`` permissions and also properly implements view restrictions)What does not work?===================Wagtail Images are not made private when they are in their collection.  This isan issue in Wagtail, and comes about because wagtail does not actually serveimages.  Images are instead served directly out of the Django media path.How do I get started?=====================You can get started with the following steps:#. Create an :class:`ApprovalPipeline <wagtailapproval.models.ApprovalPipeline>` page.#. Create a set of :class:`ApprovalStep <wagtailapproval.models.ApprovalStep>`pages inside the pipeline.#. Link the steps together (after they are created and published) by theirapproval and rejection fields.#. Create users and assign them to the groups created by the steps.#. Give the groups that should have creation permissions the relevant perms fortheir types and pages that they should be able to create in.#. Publish an object as a content creation user.There should be no subclassing necessary.  Appropriate extension should bedoable entirely through signals.  If you can't extend this in the way you needto through signals, it's probably a bug in this plugin.What versions of everything are supported?==========================================Officially supported are Python 2.7 and 3.4, across Django 1.8, 1.9, 1.10, and 1.11,and Wagtail 1.11 and 1.12.  I will not support below this, because collectionprivacy was not supported below this point, and I don't want to support thiswithout collection privacy.  It should be relatively easy to hack this out onyour own (CollectionViewRestriction might be the only pain point), but I can'tmake any promises.There is a growing test suite in ``tests``, and all combinations of thesupported versions are automaticaly tested with this suite through tox.License=======This project is licensed under the 2-clause BSD license, copyrighted by AbsolutePerformance, Inc.  See the LICENSE document for more information.Portions of code are copied from the`wagtailnews <https://github.com/takeflight/wagtailnews>`_ project, and thus thewagtailnews attribution requirements are carried as well by this project:Copyright (c) 2014, Tim HeapAll rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditions are met:#. Redistributions of source code must retain the above copyright notice, thislist of conditions and the following disclaimer.#. Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentationand/or other materials provided with the distribution.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THEIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSEARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BELIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ORCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OFSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESSINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER INCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF SUCH DAMAGE.