merge edit_feature and add_feature into one view
This commit is contained in:
parent
e823392ff4
commit
e4b60c1ac2
3 changed files with 30 additions and 63 deletions
|
@ -1,12 +1,12 @@
|
|||
from django.conf.urls import url
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from c3nav.editor.views import (add_feature, edit_feature, finalize, finalize_oauth_callback, finalize_oauth_progress,
|
||||
from c3nav.editor.views import (edit_feature, finalize, finalize_oauth_callback, finalize_oauth_progress,
|
||||
finalize_oauth_redirect)
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', TemplateView.as_view(template_name='editor/map.html'), name='editor.index'),
|
||||
url(r'^features/(?P<feature_type>[^/]+)/add/$', add_feature, name='editor.feature.add'),
|
||||
url(r'^features/(?P<feature_type>[^/]+)/add/$', edit_feature, name='editor.feature.add'),
|
||||
url(r'^features/edit/(?P<name>[^/]+)/$', edit_feature, name='editor.feature.edit'),
|
||||
url(r'^finalize/$', finalize, name='editor.finalize'),
|
||||
url(r'^finalize/oauth/$', finalize_oauth_redirect, name='editor.finalize.oauth'),
|
||||
|
|
|
@ -3,7 +3,6 @@ from django.core import signing
|
|||
from django.core.exceptions import PermissionDenied, SuspiciousOperation
|
||||
from django.http.response import Http404
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.utils.translation import activate, get_language
|
||||
from django.views.decorators.http import require_POST
|
||||
|
||||
from c3nav.editor.forms import CommitForm, FeatureForm
|
||||
|
@ -14,67 +13,27 @@ from c3nav.mapdata.packageio.write import json_encode
|
|||
from c3nav.mapdata.permissions import can_access_package
|
||||
|
||||
|
||||
def add_feature(request, feature_type):
|
||||
feature_type = FEATURE_TYPES.get(feature_type)
|
||||
if feature_type is None:
|
||||
raise Http404()
|
||||
|
||||
if request.method == 'POST':
|
||||
form = FeatureForm(request.POST, feature_type=feature_type, request=request)
|
||||
if form.is_valid():
|
||||
feature = form.instance
|
||||
feature.feature_type = feature_type.name
|
||||
feature.titles = {}
|
||||
for language, title in form.titles.items():
|
||||
if title:
|
||||
feature.titles[language] = title
|
||||
|
||||
if not settings.DIRECT_EDITING:
|
||||
content = json_encode(feature.tofile())
|
||||
language = get_language()
|
||||
title_en = feature.titles.get('en', next(iter(feature.titles.values())))
|
||||
commit_msg = 'Added %s: %s' % (str(feature_type.title).lower(), title_en)
|
||||
activate(language)
|
||||
return render(request, 'editor/feature_success.html', {
|
||||
'data': signing.dumps({
|
||||
'type': 'editor.edit',
|
||||
'action': 'create',
|
||||
'package_name': feature.package.name,
|
||||
'commit_id': feature.package.commit_id,
|
||||
'commit_msg': commit_msg,
|
||||
'file_path': feature.tofilename(),
|
||||
'content': content,
|
||||
})
|
||||
})
|
||||
|
||||
feature.save()
|
||||
|
||||
return render(request, 'editor/feature_success.html', {})
|
||||
def edit_feature(request, feature_type=None, name=None):
|
||||
if name is not None:
|
||||
# Edit existing feature
|
||||
feature = get_object_or_404(Feature, name=name)
|
||||
if not can_access_package(request, feature.package):
|
||||
raise PermissionDenied
|
||||
feature_type = FEATURE_TYPES.get(feature.feature_type)
|
||||
else:
|
||||
form = FeatureForm(feature_type=feature_type, request=request)
|
||||
|
||||
return render(request, 'editor/feature.html', {
|
||||
'form': form,
|
||||
'feature_type': feature_type,
|
||||
'path': request.path,
|
||||
'new': True
|
||||
})
|
||||
|
||||
|
||||
def edit_feature(request, name):
|
||||
feature = get_object_or_404(Feature, name=name)
|
||||
if not can_access_package(request, feature.package):
|
||||
raise PermissionDenied
|
||||
feature_type = FEATURE_TYPES.get(feature.feature_type)
|
||||
# Create new feature
|
||||
feature = None
|
||||
feature_type = FEATURE_TYPES.get(feature_type)
|
||||
if feature_type is None:
|
||||
raise Http404()
|
||||
|
||||
if request.method == 'POST':
|
||||
if request.POST.get('delete') == '1':
|
||||
if feature is not None and request.POST.get('delete') == '1':
|
||||
# Delete this feature!
|
||||
if request.POST.get('delete_confirm') == '1':
|
||||
if not settings.DIRECT_EDITING:
|
||||
language = get_language()
|
||||
title_en = feature.titles.get('en', next(iter(feature.titles.values())))
|
||||
commit_msg = 'Deleted %s: %s' % (str(feature_type.title).lower(), title_en)
|
||||
activate(language)
|
||||
commit_msg = 'Deleted %s: %s' % (feature_type.title_en.lower(), title_en)
|
||||
return render(request, 'editor/feature_success.html', {
|
||||
'data': signing.dumps({
|
||||
'type': 'editor.edit',
|
||||
|
@ -97,6 +56,8 @@ def edit_feature(request, name):
|
|||
|
||||
form = FeatureForm(instance=feature, data=request.POST, feature_type=feature_type, request=request)
|
||||
if form.is_valid():
|
||||
# Update/create feature
|
||||
commit_type = 'Created' if feature is None else 'Updated'
|
||||
feature = form.instance
|
||||
feature.feature_type = feature_type.name
|
||||
feature.titles = {}
|
||||
|
@ -106,10 +67,8 @@ def edit_feature(request, name):
|
|||
|
||||
if not settings.DIRECT_EDITING:
|
||||
content = json_encode(feature.tofile())
|
||||
language = get_language()
|
||||
title_en = feature.titles.get('en', next(iter(feature.titles.values())))
|
||||
commit_msg = 'Updated %s: %s' % (str(feature_type.title).lower(), title_en)
|
||||
activate(language)
|
||||
commit_msg = '%s %s: %s' % (commit_type, feature_type.title_en.lower(), title_en)
|
||||
return render(request, 'editor/feature_success.html', {
|
||||
'data': signing.dumps({
|
||||
'type': 'editor.edit',
|
||||
|
@ -132,7 +91,7 @@ def edit_feature(request, name):
|
|||
'form': form,
|
||||
'feature_type': feature_type,
|
||||
'path': request.path,
|
||||
'new': False
|
||||
'new': feature is None
|
||||
})
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ from collections import OrderedDict, namedtuple
|
|||
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import get_language
|
||||
from django.utils.translation import activate, get_language
|
||||
from shapely.geometry import mapping, shape
|
||||
|
||||
from c3nav.mapdata.fields import GeometryField, JSONField
|
||||
|
@ -16,6 +16,14 @@ class FeatureType(namedtuple('FeatureType', ('name', 'title', 'title_plural', 'g
|
|||
super().__init__()
|
||||
FEATURE_TYPES[self.name] = self
|
||||
|
||||
@property
|
||||
def title_en(self):
|
||||
language = get_language()
|
||||
activate('en')
|
||||
title = str(self.title)
|
||||
activate(language)
|
||||
return title
|
||||
|
||||
|
||||
FEATURE_TYPES = OrderedDict()
|
||||
FeatureType('building', _('Building'), _('Buildings'), 'polygon', '#333333')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue