From 94445edfc013b43f95920170482d9138cded0cbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sat, 25 Nov 2017 20:32:05 +0100 Subject: [PATCH] show graph node connections in editor --- src/c3nav/editor/templates/editor/graph.html | 39 +++++++++++++++++--- src/c3nav/editor/views/edit.py | 27 +++++++++++++- 2 files changed, 58 insertions(+), 8 deletions(-) diff --git a/src/c3nav/editor/templates/editor/graph.html b/src/c3nav/editor/templates/editor/graph.html index 850fb5cd..c26969b9 100644 --- a/src/c3nav/editor/templates/editor/graph.html +++ b/src/c3nav/editor/templates/editor/graph.html @@ -28,16 +28,43 @@ {% if set_active_node %}
- {% trans 'Active node:' %} {{ active_node.pk }}
- {% with space_title=active_node.space.title level_title=active_node.space.level.title %} - {% blocktrans %}in space {{ space_title }}{% endblocktrans %}
- {% blocktrans %}on level {{ level_title }}{% endblocktrans %} - {% endwith %} +

+ {% trans 'Active node:' %} {{ active_node.pk }}
+ {% with space_title=active_node.space.title level_title=active_node.space.level.title %} + {% blocktrans %}in space {{ space_title }}{% endblocktrans %}
+ {% blocktrans %}on level {{ level_title }}{% endblocktrans %} + {% endwith %} +

{% csrf_token %} -
+
+ {% trans 'Connections:' %}
+ {% for connections in active_node_connections %} + + + {% with space_title=connections.0.other_node.space.title level_title=connections.0.other_node.space.level.title %} + {% blocktrans %}Space {{ space_title }}{% endblocktrans %}
+ {% blocktrans %}on level {{ level_title }}{% endblocktrans %} + {% endwith %} +
+
+ → + {% for connection in connections %} + {% if connection.from_node_id == active_node.pk %} + {{ connection.other_node.pk }}{% if connection.waytype %}{{ connection.waytype.title }}{% endif %}, + {% endif %} + {% endfor %} +
+ ← + {% for connection in connections %} + {% if connection.from_node_id != active_node.pk %} + {{ connection.other_node.pk }}{% if connection.waytype %}{{ connection.waytype.title }}{% endif %}, + {% endif %} + {% endfor %} +


+ {% endfor %}
{% else %}
diff --git a/src/c3nav/editor/views/edit.py b/src/c3nav/editor/views/edit.py index 2b45ea93..06567427 100644 --- a/src/c3nav/editor/views/edit.py +++ b/src/c3nav/editor/views/edit.py @@ -4,6 +4,7 @@ from contextlib import suppress from django.contrib import messages from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist from django.db import models +from django.db.models import Q from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils.translation import ugettext_lazy as _ @@ -11,6 +12,7 @@ from django.views.decorators.http import etag from c3nav.editor.forms import GraphEdgeSettingsForm, GraphEditorActionForm from c3nav.editor.views.base import etag_func, sidebar_view +from c3nav.mapdata.models.access import AccessPermission def child_model(request, model: typing.Union[str, models.Model], kwargs=None, parent=None): @@ -407,12 +409,13 @@ def graph_edit(request, level=None, space=None): elif space is not None: queryset = Space.objects.filter(Space.q_for_request(request)).select_related('level').defer('geometry') space = get_object_or_404(queryset, pk=space) + level = space.level ctx.update({ 'space': space, 'level': space.level, - 'back_url': reverse('editor.spaces.detail', kwargs={'level': space.level.pk, 'pk': space.pk}), + 'back_url': reverse('editor.spaces.detail', kwargs={'level': level.pk, 'pk': space.pk}), 'back_title': _('back to space'), - 'parent_url': reverse('editor.levels.graph', kwargs={'level': space.level.pk}), + 'parent_url': reverse('editor.levels.graph', kwargs={'level': level.pk}), 'parent_title': _('to level graph'), 'geometry_url': '/api/editor/geometries/?space='+str(space.pk), }) @@ -440,6 +443,7 @@ def graph_edit(request, level=None, space=None): 'obj_title': node.title }) + permissions = AccessPermission.get_for_request(request) | set([None]) edge_settings_form = GraphEdgeSettingsForm(instance=GraphEdge(), request=request, data=request.POST) graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=create_nodes, data=request.POST) @@ -482,9 +486,28 @@ def graph_edit(request, level=None, space=None): messages.error(request, _('You can not edit changes on this changeset.')) if set_active_node: + if active_node: + connections = {} + for self_node, other_node in (('from_node', 'to_node'), ('to_node', 'from_node')): + conn_qs = GraphEdge.objects.filter(Q(**{self_node+'__pk': active_node.pk})) + conn_qs = conn_qs.select_related(other_node+'__space', other_node+'__space__level', 'waytype') + + for edge in conn_qs: + edge.other_node = getattr(edge, other_node) + if (edge.other_node.space.access_restriction_id not in permissions + or edge.other_node.space.level.access_restriction_id not in permissions): + continue + connections.setdefault(edge.other_node.space_id, []).append(edge) + connections = sorted( + connections.values(), + key=lambda c: (c[0].other_node.space.level == level, + c[0].other_node.space == space, + c[0].other_node.space.level.base_altitude) + ) ctx.update({ 'set_active_node': set_active_node, 'active_node': active_node, + 'active_node_connections': connections, }) else: edge_settings_form = GraphEdgeSettingsForm(request=request)