diff --git a/src/c3nav/editor/api.py b/src/c3nav/editor/api.py index 41807f00..ddc1aa26 100644 --- a/src/c3nav/editor/api.py +++ b/src/c3nav/editor/api.py @@ -83,7 +83,7 @@ class EditorViewSet(ViewSet): levels, levels_on_top, levels_under = self._get_levels_pk(request, level) # don't prefetch groups for now as changesets do not yet work with m2m-prefetches levels = Level.objects.filter(pk__in=levels).filter(Level.q_for_request(request)) - graphnodes = request.changeset.wrap_model('GraphNode').objects.filter(space_transfer=True) + graphnodes = request.changeset.wrap_model('GraphNode').objects.all() levels = levels.prefetch_related( Prefetch('spaces', request.changeset.wrap_model('Space').objects.filter(Space.q_for_request(request))), Prefetch('doors', request.changeset.wrap_model('Door').objects.filter(Door.q_for_request(request))), @@ -130,6 +130,7 @@ class EditorViewSet(ViewSet): space = next(s for s in other_spaces if s.pk == space.pk) other_spaces = [s for s in other_spaces if s.geometry.intersects(doors_space_geom) and s.pk != space.pk] + all_other_spaces = other_spaces if level.on_top_of_id is None: other_spaces_lower = [s for s in other_spaces if s.level_id in levels_under] @@ -154,11 +155,12 @@ class EditorViewSet(ViewSet): # todo: permissions graphnodes = request.changeset.wrap_model('GraphNode').objects.all() - graphnodes = graphnodes.filter((Q(space__in=other_spaces) & Q(space_transfer=True)) | - Q(space__pk=space.pk)) + graphnodes = graphnodes.filter((Q(space__in=all_other_spaces)) | Q(space__pk=space.pk)) + + space_graphnodes = tuple(node for node in graphnodes if node.space == space) graphedges = request.changeset.wrap_model('GraphEdge').objects.all() - graphedges = graphedges.filter(Q(from_node__in=graphnodes) | Q(to_node__in=graphnodes)) + graphedges = graphedges.filter(Q(from_node__in=space_graphnodes) | Q(to_node__in=space_graphnodes)) graphedges = graphedges.select_related('from_node', 'to_node', 'waytype') results = chain( @@ -203,7 +205,6 @@ class EditorViewSet(ViewSet): 'poi': '#4488cc', 'shadow': '#000000', 'graphnode': '#00BB00', - 'graphnode__space_transfer': '#008800', 'graphedge': '#00CC00', 'altitudemarker': '#ffff00', }) diff --git a/src/c3nav/editor/forms.py b/src/c3nav/editor/forms.py index f609e3be..72992fa4 100644 --- a/src/c3nav/editor/forms.py +++ b/src/c3nav/editor/forms.py @@ -15,7 +15,7 @@ from shapely.geometry.geo import mapping from c3nav.editor.models import ChangeSet, ChangeSetUpdate from c3nav.mapdata.fields import GeometryField -from c3nav.mapdata.models import GraphEdge, GraphNode +from c3nav.mapdata.models import GraphEdge class EditorFormBase(ModelForm): @@ -161,7 +161,7 @@ class EditorFormBase(ModelForm): def create_editor_form(editor_model): possible_fields = ['slug', 'name', 'ordering', 'category', 'width', 'groups', 'color', 'priority', 'altitude', - 'waytype', 'access_restriction', 'space_transfer', 'can_search', 'can_describe', 'outside', + 'waytype', 'access_restriction', 'can_search', 'can_describe', 'outside', 'geometry', 'single', 'allow_levels', 'allow_spaces', 'allow_areas', 'allow_pois', 'left', 'top', 'right', 'bottom'] field_names = [field.name for field in editor_model._meta.get_fields() if not field.one_to_many] @@ -190,12 +190,6 @@ class RejectForm(ModelForm): fields = ('comment', ) -class GraphNodeSettingsForm(ModelForm): - class Meta: - model = GraphNode - fields = ('space_transfer', ) - - class GraphEdgeSettingsForm(ModelForm): class Meta: model = GraphEdge @@ -243,7 +237,6 @@ class GraphEditorSettingsForm(Form): ('activate', _('activate')), ('deactivate', _('deactivate')), ('toggle', _('toggle')), - ('set_space_transfer', _('set space transfer')), ('delete', _('delete node')), ('noop', _('do nothing')), ), initial='connect_or_toggle') diff --git a/src/c3nav/editor/static/editor/js/editor.js b/src/c3nav/editor/static/editor/js/editor.js index 35537865..b269f278 100644 --- a/src/c3nav/editor/static/editor/js/editor.js +++ b/src/c3nav/editor/static/editor/js/editor.js @@ -159,22 +159,15 @@ editor = { } var active_graph_node = content.find('[data-active-node]'); - if (!editor._active_graph_node_space_transfer && !editor._in_modal && editor._last_graph_path !== editor.get_location_path()) { - editor._active_graph_node = null; - editor._active_graph_node_space_transfer = null; - editor._active_graph_node_html = null; - } if (active_graph_node.length) { var active_graph_node_id = active_graph_node.attr('data-active-node'); if (active_graph_node_id !== '') { if (active_graph_node_id === 'null') { editor._active_graph_node = null; - editor._active_graph_node_space_transfer = null; editor._active_graph_node_html = null; active_graph_node.remove(); } else { editor._active_graph_node = active_graph_node_id; - editor._active_graph_node_space_transfer = active_graph_node.is('[data-space-transfer]'); editor._active_graph_node_html = active_graph_node.html(); } } else if (editor._active_graph_node_html !== null) { @@ -294,7 +287,6 @@ editor = { _graph_editing: false, _graph_creating: false, _active_graph_node: null, - _active_graph_node_space_transfer: null, _active_graph_node_html: null, _deactivate_graph_node_on_click: false, _graph_edges_from: {}, @@ -467,9 +459,6 @@ editor = { _get_geometry_style: function (feature) { // style callback for GeoJSON loader var style = editor._get_mapitem_type_style(feature.properties.type); - if (feature.properties.space_transfer) { - style = editor._get_mapitem_type_style('graphnode__space_transfer'); - } if (editor._level_control.current_level_id === editor._sublevel_control.current_level_id) { if (editor._sublevel_control.level_ids.indexOf(feature.properties.level) >= 0 && editor._level_control.current_level_id !== feature.properties.level) { style.stroke = true; @@ -703,7 +692,6 @@ editor = { sidebar.find('[data-active-node]').remove(); sidebar.find('#id_active_node').val(''); editor._active_graph_node = null; - editor._active_graph_node_space_transfer = null; editor._active_graph_node_html = null; return; } diff --git a/src/c3nav/editor/templates/editor/graph.html b/src/c3nav/editor/templates/editor/graph.html index 4f404d91..cf41cb86 100644 --- a/src/c3nav/editor/templates/editor/graph.html +++ b/src/c3nav/editor/templates/editor/graph.html @@ -29,8 +29,8 @@ {% bootstrap_messages %} {% if set_active_node %} -
- {% trans 'Active node:' %} {{ active_node.pk }}{% if active_node.space_transfer %} ({% trans 'space transfer node' %}){% endif %}
+
+ {% 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 %} @@ -43,9 +43,6 @@
{% csrf_token %} -

{% trans 'Default node properties' %}

- {% bootstrap_form node_settings_form %} -

{% trans 'Default edge properties' %}

{% bootstrap_form edge_settings_form %} diff --git a/src/c3nav/editor/views/edit.py b/src/c3nav/editor/views/edit.py index ccdc4dcd..a6ac7623 100644 --- a/src/c3nav/editor/views/edit.py +++ b/src/c3nav/editor/views/edit.py @@ -8,8 +8,7 @@ from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils.translation import ugettext_lazy as _ -from c3nav.editor.forms import (GraphEdgeSettingsForm, GraphEditorActionForm, GraphEditorSettingsForm, - GraphNodeSettingsForm) +from c3nav.editor.forms import GraphEdgeSettingsForm, GraphEditorActionForm, GraphEditorSettingsForm from c3nav.editor.views.base import sidebar_view @@ -452,11 +451,10 @@ def graph_edit(request, level=None, space=None): allow_clicked_position = True if request.method == 'POST': - node_settings_form = GraphNodeSettingsForm(instance=GraphNode(), data=request.POST) edge_settings_form = GraphEdgeSettingsForm(instance=GraphEdge(), request=request, data=request.POST) graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=allow_clicked_position, data=request.POST) - if node_settings_form.is_valid() and edge_settings_form.is_valid() and graph_action_form.is_valid(): + if edge_settings_form.is_valid() and graph_action_form.is_valid(): goto_space = graph_action_form.cleaned_data['goto_space'] if goto_space is not None: return redirect(reverse('editor.spaces.graph', kwargs={'space': goto_space.pk})) @@ -496,14 +494,6 @@ def graph_edit(request, level=None, space=None): elif node_click_setting == 'toggle': active_node = None if active_node == clicked_node else clicked_node set_active_node = True - elif node_click_setting == 'set_space_transfer': - with request.changeset.lock_to_edit(request) as changeset: - if changeset.can_edit(request): - clicked_node.space_transfer = node_settings_form.instance.space_transfer - clicked_node.save() - messages.success(request, _('Space transfer set.')) - else: - messages.error(request, _('You can not edit changes on this changeset.')) elif node_click_setting == 'delete': with request.changeset.lock_to_edit(request) as changeset: if changeset.can_edit(request): @@ -530,12 +520,7 @@ def graph_edit(request, level=None, space=None): with request.changeset.lock_to_edit(request) as changeset: if changeset.can_edit(request): after_create_node_setting = graph_editing_settings['after_create_node'] - node = node_settings_form.instance - node.space = space - node.geometry = clicked_position - if (active_node is not None and after_create_node_setting == 'connect' and - active_node.space != space): - node.space_transfer = True + node = GraphNode(space=space, geometry=clicked_position) node.save() messages.success(request, _('New graph node created.')) if after_create_node_setting == 'connect': @@ -557,12 +542,10 @@ def graph_edit(request, level=None, space=None): 'active_node': active_node, }) else: - node_settings_form = GraphNodeSettingsForm() edge_settings_form = GraphEdgeSettingsForm(request=request) graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=allow_clicked_position) ctx.update({ - 'node_settings_form': node_settings_form, 'edge_settings_form': edge_settings_form, 'graph_action_form': graph_action_form, 'graph_editing': graph_editing, diff --git a/src/c3nav/mapdata/migrations/0032_remove_graphnode_space_transfer.py b/src/c3nav/mapdata/migrations/0032_remove_graphnode_space_transfer.py new file mode 100644 index 00000000..cf5fc6ae --- /dev/null +++ b/src/c3nav/mapdata/migrations/0032_remove_graphnode_space_transfer.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-08-06 14:42 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('mapdata', '0031_auto_20170805_1647'), + ] + + operations = [ + migrations.RemoveField( + model_name='graphnode', + name='space_transfer', + ), + ] diff --git a/src/c3nav/mapdata/models/graph.py b/src/c3nav/mapdata/models/graph.py index e96cdba7..12c940f5 100644 --- a/src/c3nav/mapdata/models/graph.py +++ b/src/c3nav/mapdata/models/graph.py @@ -16,7 +16,6 @@ class GraphNode(SpaceGeometryMixin, models.Model): A graph node """ geometry = GeometryField('point') - space_transfer = models.BooleanField(_('space transfer node'), default=False, db_index=True) class Meta: verbose_name = _('Graph Node') @@ -25,8 +24,6 @@ class GraphNode(SpaceGeometryMixin, models.Model): def get_geojson_properties(self, *args, **kwargs) -> dict: result = super().get_geojson_properties(*args, **kwargs) - if self.space_transfer: - result['space_transfer'] = True return result