refactor edit view a bit
This commit is contained in:
parent
7238603551
commit
1d8e38bc96
2 changed files with 25 additions and 17 deletions
|
@ -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
|
||||||
|
|
|
@ -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 = {}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue