143 lines
6.2 KiB
Python
143 lines
6.2 KiB
Python
from __future__ import absolute_import, unicode_literals
|
|
|
|
import logging
|
|
|
|
from django.conf import settings
|
|
from django.contrib import messages
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
|
from django.core.urlresolvers import reverse
|
|
from django.http import Http404, HttpResponseRedirect
|
|
from django.shortcuts import get_object_or_404, render_to_response
|
|
from django.template import RequestContext
|
|
from django.utils.http import urlencode
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from common.utils import encapsulate
|
|
from permissions.models import Permission
|
|
|
|
from .forms import TransformationForm
|
|
from .models import Transformation
|
|
from .permissions import (
|
|
PERMISSION_TRANSFORMATION_CREATE, PERMISSION_TRANSFORMATION_DELETE,
|
|
PERMISSION_TRANSFORMATION_EDIT, PERMISSION_TRANSFORMATION_VIEW
|
|
)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def transformation_list(request, app_label, model, object_id):
|
|
content_type = get_object_or_404(ContentType, app_label=app_label, model=model)
|
|
|
|
try:
|
|
content_object = content_type.get_object_for_this_type(pk=object_id)
|
|
except content_type.model_class().DoesNotExist:
|
|
raise Http404
|
|
|
|
try:
|
|
Permission.objects.check_permissions(request.user, [PERMISSION_TRANSFORMATION_VIEW])
|
|
except PermissionDenied:
|
|
AccessEntry.objects.check_access(PERMISSION_TRANSFORMATION_VIEW, request.user, content_object)
|
|
|
|
context = {
|
|
'object_list': Transformation.objects.get_for_model(content_object),
|
|
'content_object': content_object,
|
|
'navigation_object_list': ['content_object'],
|
|
'title': _('Transformations for: %s') % content_object,
|
|
'extra_columns': [
|
|
{'name': _('Order'), 'attribute': 'order'},
|
|
{'name': _('Transformation'), 'attribute': encapsulate(lambda x: unicode(x))},
|
|
{'name': _('Arguments'), 'attribute': 'arguments'}
|
|
],
|
|
'hide_link': True,
|
|
'hide_object': True,
|
|
}
|
|
return render_to_response(
|
|
'appearance/generic_list.html', context, context_instance=RequestContext(request)
|
|
)
|
|
|
|
|
|
def transformation_create(request, app_label, model, object_id):
|
|
content_type = get_object_or_404(ContentType, app_label=app_label, model=model)
|
|
|
|
try:
|
|
content_object = content_type.get_object_for_this_type(pk=object_id)
|
|
except content_type.model_class().DoesNotExist:
|
|
raise Http404
|
|
|
|
try:
|
|
Permission.objects.check_permissions(request.user, [PERMISSION_TRANSFORMATION_CREATE])
|
|
except PermissionDenied:
|
|
AccessEntry.objects.check_access(PERMISSION_TRANSFORMATION_CREATE, request.user, content_object)
|
|
|
|
if request.method == 'POST':
|
|
form = TransformationForm(request.POST, initial={'content_object': content_object})
|
|
if form.is_valid():
|
|
instance = form.save(commit=False)
|
|
instance.content_object = content_object
|
|
instance.save()
|
|
messages.success(request, _('Transformation created successfully.'))
|
|
return HttpResponseRedirect(reverse('converter:transformation_list', args=[app_label, model, object_id]))
|
|
else:
|
|
form = TransformationForm(initial={'content_object': content_object})
|
|
|
|
return render_to_response('appearance/generic_form.html', {
|
|
'form': form,
|
|
'content_object': content_object,
|
|
'navigation_object_list': ['content_object'],
|
|
'title': _('Create new transformation for: %s') % content_object,
|
|
}, context_instance=RequestContext(request))
|
|
|
|
|
|
def transformation_delete(request, object_id):
|
|
transformation = get_object_or_404(Transformation, pk=object_id)
|
|
|
|
try:
|
|
Permission.objects.check_permissions(request.user, [PERMISSION_TRANSFORMATION_DELETE])
|
|
except PermissionDenied:
|
|
AccessEntry.objects.check_access(PERMISSION_TRANSFORMATION_DELETE, request.user, transformation.content_object)
|
|
|
|
if request.method == 'POST':
|
|
transformation.delete()
|
|
messages.success(request, _('Transformation deleted successfully.'))
|
|
return HttpResponseRedirect(reverse('converter:transformation_list', args=[transformation.content_type.app_label, transformation.content_type.model, transformation.object_id]))
|
|
|
|
return render_to_response('appearance/generic_confirm.html', {
|
|
'content_object': transformation.content_object,
|
|
'delete_view': True,
|
|
'navigation_object_list': ['content_object', 'transformation'],
|
|
'previous': reverse('converter:transformation_list', args=[transformation.content_type.app_label, transformation.content_type.model, transformation.object_id]),
|
|
'title': _('Are you sure you wish to delete transformation "%(transformation)s" for: %(content_object)s') % {
|
|
'transformation': transformation,
|
|
'content_object': transformation.content_object},
|
|
'transformation': transformation,
|
|
}, context_instance=RequestContext(request))
|
|
|
|
|
|
def transformation_edit(request, object_id):
|
|
transformation = get_object_or_404(Transformation, pk=object_id)
|
|
|
|
try:
|
|
Permission.objects.check_permissions(request.user, [PERMISSION_TRANSFORMATION_EDIT])
|
|
except PermissionDenied:
|
|
AccessEntry.objects.check_access(PERMISSION_TRANSFORMATION_EDIT, request.user, transformation.content_object)
|
|
|
|
if request.method == 'POST':
|
|
form = TransformationForm(request.POST, instance=transformation)
|
|
if form.is_valid():
|
|
form.save()
|
|
messages.success(request, _('Transformation edited successfully.'))
|
|
return HttpResponseRedirect(reverse('converter:transformation_list', args=[transformation.content_type.app_label, transformation.content_type.model, transformation.object_id]))
|
|
else:
|
|
form = TransformationForm(instance=transformation)
|
|
|
|
return render_to_response('appearance/generic_form.html', {
|
|
'content_object': transformation.content_object,
|
|
'form': form,
|
|
'navigation_object_list': ['content_object', 'transformation'],
|
|
'title': _('Edit transformation "%(transformation)s" for: %(content_object)s') % {
|
|
'transformation': transformation,
|
|
'content_object': transformation.content_object},
|
|
'transformation': transformation,
|
|
}, context_instance=RequestContext(request))
|