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): def __init__(self, request):
self.request = request self.request = request
@classmethod
def from_obj(cls, obj, request):
return cls(request)
@property @property
def can_access_child_base_mapdata(self): def can_access_child_base_mapdata(self):
return self.request.user_permissions.can_access_base_mapdata return self.request.user_permissions.can_access_base_mapdata
@ -24,6 +28,10 @@ class LevelChildEditUtils(DefaultEditUtils):
super().__init__(request) super().__init__(request)
self.level = level self.level = level
@classmethod
def from_obj(cls, obj, request):
return cls(obj, request)
@property @property
def _geometry_url(self): def _geometry_url(self):
return '/api/editor/geometries/?level=' + str(self.level.primary_level_pk) return '/api/editor/geometries/?level=' + str(self.level.primary_level_pk)
@ -34,6 +42,10 @@ class SpaceChildEditUtils(DefaultEditUtils):
super().__init__(request) super().__init__(request)
self.space = space self.space = space
@classmethod
def from_obj(cls, obj, request):
return cls(obj, request)
@property @property
def can_access_child_base_mapdata(self): def can_access_child_base_mapdata(self):
return (self.request.user_permissions.can_access_base_mapdata or 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 raise PermissionDenied
obj = None obj = None
edit_utils = DefaultEditUtils(request)
if pk is not None: if pk is not None:
# Edit existing map item # Edit existing map item
kwargs = {'pk': pk} kwargs = {'pk': pk}
qs = model.objects.all() qs = model.objects.all()
if hasattr(model, 'q_for_request'): if hasattr(model, 'q_for_request'):
qs = qs.filter(model.q_for_request(request)) qs = qs.filter(model.q_for_request(request))
utils_cls = DefaultEditUtils
if level is not None: if level is not None:
# parent object is a level
kwargs.update({'level__pk': level}) kwargs.update({'level__pk': level})
qs = qs.select_related('level') qs = qs.select_related('level')
if not request.user_permissions.can_access_base_mapdata: utils_cls = LevelChildEditUtils
can_edit = False
elif space is not None: elif space is not None:
# parent object is a space
kwargs.update({'space__pk': space}) kwargs.update({'space__pk': space})
qs = qs.select_related('space') qs = qs.select_related('space')
else: utils_cls = SpaceChildEditUtils
if not request.user_permissions.can_access_base_mapdata:
can_edit = False
obj = get_object_or_404(qs, **kwargs) obj = get_object_or_404(qs, **kwargs)
edit_utils = utils_cls.from_obj(obj, request)
elif level is not None: elif level is not None:
level = get_object_or_404(Level.objects.filter(Level.q_for_request(request)), pk=level) 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: elif space is not None:
space = get_object_or_404(Space.objects.filter(Space.q_for_request(request)), pk=space) 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: 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), on_top_of = get_object_or_404(Level.objects.filter(Level.q_for_request(request), on_top_of__isnull=True),
pk=on_top_of) 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, 'pk': pk,
'model_name': model.__name__.lower(), 'model_name': model.__name__.lower(),
'model_title': model._meta.verbose_name, 'model_title': model._meta.verbose_name,
'can_edit': can_edit, 'can_edit': can_edit and (not new or edit_utils.can_create),
'new': new, 'new': new,
'title': obj.title if obj else None, 'title': obj.title if obj else None,
'geometry_url': edit_utils.geometry_url,
} }
with suppress(FieldDoesNotExist): 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: if not new:
ctx.update({ 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, 'on_top_of': obj.on_top_of,
}) })
elif on_top_of: elif on_top_of:
ctx.update({ 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, 'on_top_of': on_top_of,
'back_url': reverse('editor.levels.detail', kwargs={'pk': on_top_of.pk}), '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({ ctx.update({
'level': obj.level, 'level': obj.level,
'back_url': reverse('editor.spaces.detail', kwargs={'level': obj.level.pk, 'pk': pk}), '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, 'nozoom': True,
}) })
elif model == Space and new: elif model == Space and new:
ctx.update({ ctx.update({
'level': level, 'level': level,
'back_url': reverse('editor.spaces.list', kwargs={'level': level.pk}), '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, 'nozoom': True,
}) })
elif hasattr(model, 'level'): 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({ ctx.update({
'level': level, 'level': level,
'back_url': reverse('editor.'+related_name+'.list', kwargs={'level': level.pk}), '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'): elif hasattr(model, 'space'):
if not new: 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({ ctx.update({
'level': space.level, 'level': space.level,
'back_url': reverse('editor.'+related_name+'.list', kwargs={'space': space.pk}), '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: else:
kwargs = {} kwargs = {}