diff --git a/src/c3nav/editor/views.py b/src/c3nav/editor/views.py index 33d5116a..b8cc204f 100644 --- a/src/c3nav/editor/views.py +++ b/src/c3nav/editor/views.py @@ -131,7 +131,7 @@ def edit_mapitem(request, mapitem_type, name=None): mapitem.titles[language] = title if not settings.DIRECT_EDITING: - content = json_encode(mapitem.tofile()) + content = json_encode(mapitem.tofile(form=form)) with translation.override('en'): commit_msg = '%s %s: %s' % (commit_type, mapitemtype._meta.verbose_name, mapitem.title) return render(request, 'editor/mapitem_success.html', { diff --git a/src/c3nav/mapdata/models/base.py b/src/c3nav/mapdata/models/base.py index c6551b33..ccb7316c 100644 --- a/src/c3nav/mapdata/models/base.py +++ b/src/c3nav/mapdata/models/base.py @@ -49,7 +49,7 @@ class MapItem(models.Model, metaclass=MapItemMeta): kwargs = {} return kwargs - def tofile(self): + def tofile(self, form=None): return OrderedDict() def save(self, *args, **kwargs): diff --git a/src/c3nav/mapdata/models/geometry.py b/src/c3nav/mapdata/models/geometry.py index 213d4936..c2228235 100644 --- a/src/c3nav/mapdata/models/geometry.py +++ b/src/c3nav/mapdata/models/geometry.py @@ -60,7 +60,7 @@ class GeometryMapItem(MapItem, metaclass=GeometryMapItemMeta): ('geometry', format_geojson(mapping(self.geometry), round=False)), )) - def tofile(self): + def tofile(self, form=None): result = super().tofile() result['geometry'] = format_geojson(mapping(self.geometry)) return result @@ -96,7 +96,7 @@ class GeometryMapItemWithLevel(GeometryMapItem): result['level'] = self.level.name return result - def tofile(self): + def tofile(self, form=None): result = super().tofile() result['level'] = self.level.name result.move_to_end('geometry') @@ -200,7 +200,7 @@ class Escalator(GeometryMapItemWithLevel): result['direction'] = 'up' if self.direction else 'down' return result - def tofile(self): + def tofile(self, form=None): result = super().tofile() result['direction'] = self.direction return result @@ -265,7 +265,7 @@ class Obstacle(GeometryMapItemWithLevel): result['crop_to_level'] = self.crop_to_level.name return result - def tofile(self): + def tofile(self, form=None): result = super().tofile() if self.crop_to_level is not None: result['crop_to_level'] = self.crop_to_level.name @@ -308,7 +308,7 @@ class LineObstacle(GeometryMapItemWithLevel): result['width'] = float(self.width) return result - def tofile(self): + def tofile(self, form=None): result = super().tofile() result['width'] = float(self.width) return result @@ -346,7 +346,7 @@ class LevelConnector(GeometryMapItem): result['levels'] = tuple(self.levels.all().order_by('name').values_list('name', flat=True)) return result - def tofile(self): + def tofile(self, form=None): result = super().tofile() result['levels'] = sorted(self.levels.all().order_by('name').values_list('name', flat=True)) result.move_to_end('geometry') @@ -415,7 +415,7 @@ class ElevatorLevel(GeometryMapItemWithLevel): return kwargs - def tofile(self): + def tofile(self, form=None): result = super().tofile() result['elevator'] = self.elevator.name result['button'] = self.button diff --git a/src/c3nav/mapdata/models/level.py b/src/c3nav/mapdata/models/level.py index 5646c257..7c5c0916 100644 --- a/src/c3nav/mapdata/models/level.py +++ b/src/c3nav/mapdata/models/level.py @@ -65,7 +65,7 @@ class Level(MapItem): return kwargs - def tofile(self): + def tofile(self, form=None): result = super().tofile() result['altitude'] = float(self.altitude) result['intermediate'] = self.intermediate diff --git a/src/c3nav/mapdata/models/locations.py b/src/c3nav/mapdata/models/locations.py index ea6b7e75..2de5db7c 100644 --- a/src/c3nav/mapdata/models/locations.py +++ b/src/c3nav/mapdata/models/locations.py @@ -64,8 +64,8 @@ class LocationModelMixin(Location): return kwargs - def tofile(self): - result = super().tofile() + def tofile(self, form=None): + result = super().tofile(form=form) result['titles'] = OrderedDict(sorted(self.titles.items())) result['can_search'] = self.can_search return result @@ -140,7 +140,7 @@ class LocationGroup(LocationModelMixin, MapItem): result = super().get_geojson_properties() return result - def tofile(self): + def tofile(self, form=None): result = super().tofile() result['compiled_room'] = self.compiled_room return result @@ -269,9 +269,12 @@ class AreaLocation(LocationModelMixin, GeometryMapItemWithLevel): result = super().get_geojson_properties() return result - def tofile(self): - result = super().tofile() - result['groups'] = sorted(self.groups.all().order_by('name').values_list('name', flat=True)) + def tofile(self, form=None): + result = super().tofile(form=form) + if form is not None: + result['groups'] = sorted(group.name for group in form.cleaned_data['groups']) + else: + result['groups'] = sorted(self.groups.all().order_by('name').values_list('name', flat=True)) result['location_type'] = self.location_type result['can_search'] = self.can_search result['can_describe'] = self.can_describe diff --git a/src/c3nav/mapdata/models/package.py b/src/c3nav/mapdata/models/package.py index c076404b..163dd51c 100644 --- a/src/c3nav/mapdata/models/package.py +++ b/src/c3nav/mapdata/models/package.py @@ -83,7 +83,7 @@ class Package(models.Model): def tofilename(self): return 'package.json' - def tofile(self): + def tofile(self, form=None): data = OrderedDict() data['name'] = self.name if self.home_repo is not None: diff --git a/src/c3nav/mapdata/models/source.py b/src/c3nav/mapdata/models/source.py index fbf07604..698f2e52 100644 --- a/src/c3nav/mapdata/models/source.py +++ b/src/c3nav/mapdata/models/source.py @@ -47,7 +47,7 @@ class Source(MapItem): return kwargs - def tofile(self): + def tofile(self, form=None): result = super().tofile() result['bounds'] = ((float(self.bottom), float(self.left)), (float(self.top), float(self.right))) return result