def inner(version, **kwargs):
     old_save(version, **kwargs)
     # A draft version is locked by default
     if version.state == constants.DRAFT:
         if not version_is_locked(version):
             # create a lock
             create_version_lock(version, version.created_by)
     # A any other state than draft has no lock, an existing lock should be removed
     else:
         remove_version_lock(version)
     return version
def _unlock_view(self, request, object_id):
    """
    Unlock a locked version
    """
    # This view always changes data so only POST requests should work
    if request.method != 'POST':
        return HttpResponseNotAllowed(
            ['POST'], _('This view only supports POST method.'))

    # Check version exists
    version = self.get_object(request, unquote(object_id))
    if version is None:
        return self._get_obj_does_not_exist_redirect(request, self.model._meta,
                                                     object_id)

    # Raise 404 if not locked
    if version.state != constants.DRAFT:
        raise Http404

    # Check that the user has unlock permission
    if not request.user.has_perm(
            'djangocms_version_locking.delete_versionlock'):
        return HttpResponseForbidden(
            force_text(
                _("You do not have permission to remove the version lock")))

    # Unlock the version
    remove_version_lock(version)
    # Display message
    messages.success(request, _("Version unlocked"))

    # Send an email notification
    notify_version_author_version_unlocked(version, request.user)

    # Redirect
    url = version_list_url(version.content)
    return redirect(url)