refactor edit view a bit

This commit is contained in:
Laura Klünder 2018-12-09 20:54:47 +01:00
parent 7238603551
commit 1d8e38bc96
2 changed files with 25 additions and 17 deletions

View file

@ -2,6 +2,10 @@ class DefaultEditUtils:
def __init__(self, request):
self.request = request
@classmethod
def from_obj(cls, obj, request):
return cls(request)
@property
def can_access_child_base_mapdata(self):
return self.request.user_permissions.can_access_base_mapdata
@ -24,6 +28,10 @@ class LevelChildEditUtils(DefaultEditUtils):
super().__init__(request)
self.level = level
@classmethod
def from_obj(cls, obj, request):
return cls(obj, request)
@property
def _geometry_url(self):
return '/api/editor/geometries/?level=' + str(self.level.primary_level_pk)
@ -34,6 +42,10 @@ class SpaceChildEditUtils(DefaultEditUtils):
super().__init__(request)
self.space = space
@classmethod
def from_obj(cls, obj, request):
return cls(obj, request)
@property
def can_access_child_base_mapdata(self):
return (self.request.user_permissions.can_access_base_mapdata or

View file

@ -143,28 +143,34 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
raise PermissionDenied
obj = None
edit_utils = DefaultEditUtils(request)
if pk is not None:
# Edit existing map item
kwargs = {'pk': pk}
qs = model.objects.all()
if hasattr(model, 'q_for_request'):
qs = qs.filter(model.q_for_request(request))
utils_cls = DefaultEditUtils
if level is not None:
# parent object is a level
kwargs.update({'level__pk': level})
qs = qs.select_related('level')
if not request.user_permissions.can_access_base_mapdata:
can_edit = False
utils_cls = LevelChildEditUtils
elif space is not None:
# parent object is a space
kwargs.update({'space__pk': space})
qs = qs.select_related('space')
else:
if not request.user_permissions.can_access_base_mapdata:
can_edit = False
utils_cls = SpaceChildEditUtils
obj = get_object_or_404(qs, **kwargs)
edit_utils = utils_cls.from_obj(obj, request)
elif level is not None:
level = get_object_or_404(Level.objects.filter(Level.q_for_request(request)), pk=level)
edit_utils = LevelChildEditUtils(level, request)
elif space is not None:
space = get_object_or_404(Space.objects.filter(Space.q_for_request(request)), pk=space)
edit_utils = SpaceChildEditUtils(space, request)
elif on_top_of is not None:
on_top_of = get_object_or_404(Level.objects.filter(Level.q_for_request(request), on_top_of__isnull=True),
pk=on_top_of)
@ -177,9 +183,10 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
'pk': pk,
'model_name': model.__name__.lower(),
'model_title': model._meta.verbose_name,
'can_edit': can_edit,
'can_edit': can_edit and (not new or edit_utils.can_create),
'new': new,
'title': obj.title if obj else None,
'geometry_url': edit_utils.geometry_url,
}
with suppress(FieldDoesNotExist):
@ -197,14 +204,10 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
})
if not new:
ctx.update({
'geometry_url': ('/api/editor/geometries/?level='+str(obj.primary_level_pk)
if request.user_permissions.can_access_base_mapdata else None),
'on_top_of': obj.on_top_of,
})
elif on_top_of:
ctx.update({
'geometry_url': ('/api/editor/geometries/?level=' + str(on_top_of.pk)
if request.user_permissions.can_access_base_mapdata else None),
'on_top_of': on_top_of,
'back_url': reverse('editor.levels.detail', kwargs={'pk': on_top_of.pk}),
})
@ -213,16 +216,12 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
ctx.update({
'level': obj.level,
'back_url': reverse('editor.spaces.detail', kwargs={'level': obj.level.pk, 'pk': pk}),
'geometry_url': ('/api/editor/geometries/?space='+pk
if request.user_permissions.can_access_base_mapdata else None),
'nozoom': True,
})
elif model == Space and new:
ctx.update({
'level': level,
'back_url': reverse('editor.spaces.list', kwargs={'level': level.pk}),
'geometry_url': ('/api/editor/geometries/?level='+str(level.primary_level_pk)
if request.user_permissions.can_access_base_mapdata else None),
'nozoom': True,
})
elif hasattr(model, 'level'):
@ -231,8 +230,6 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
ctx.update({
'level': level,
'back_url': reverse('editor.'+related_name+'.list', kwargs={'level': level.pk}),
'geometry_url': ('/api/editor/geometries/?level='+str(level.primary_level_pk)
if request.user_permissions.can_access_base_mapdata else None),
})
elif hasattr(model, 'space'):
if not new:
@ -242,7 +239,6 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
ctx.update({
'level': space.level,
'back_url': reverse('editor.'+related_name+'.list', kwargs={'space': space.pk}),
'geometry_url': '/api/editor/geometries/?space='+str(space.pk) if force_geometry_editable else None,
})
else:
kwargs = {}