redirect to /editor/finalize and show edit and signin button

This commit is contained in:
Laura Klünder 2016-09-26 16:44:17 +02:00
parent ade73d19a2
commit 66c459ae17
10 changed files with 112 additions and 41 deletions

View file

@ -1,11 +1,16 @@
from django.conf import settings
from django.core import signing
from django.core.exceptions import PermissionDenied
from django.db import transaction
from django.http.response import Http404
from django.shortcuts import get_object_or_404, render
from django.utils.translation import ugettext_lazy as _
from django.views.decorators.http import require_POST
from c3nav.editor.forms import FeatureForm
from c3nav.editor.hosters import get_hoster_for_package
from c3nav.mapdata.models.feature import FEATURE_TYPES, Feature
from c3nav.mapdata.models.package import Package
from c3nav.mapdata.packageio.write import json_encode
from c3nav.mapdata.permissions import can_access_package
@ -17,17 +22,19 @@ def add_feature(request, feature_type):
if request.method == 'POST':
form = FeatureForm(request.POST, feature_type=feature_type)
if form.is_valid():
if not settings.DIRECT_EDITING:
return render(request, 'editor/feature_success.html', {})
feature = form.instance
feature.feature_type = feature_type.name
feature.titles = {}
for language, title in form.titles.items():
if title:
feature.titles[language] = title
with transaction.atomic():
feature = form.instance
feature.feature_type = feature_type.name
feature.titles = {}
for language, title in form.titles.items():
if title:
feature.titles[language] = title
feature.save()
if not settings.DIRECT_EDITING:
return render(request, 'editor/feature_success.html', {
'data': signing.dumps((feature.package.name, feature.tofilename(), json_encode(feature.tofile())))
})
feature.save()
return render(request, 'editor/feature_success.html', {})
else:
@ -51,7 +58,9 @@ def edit_feature(request, name):
if request.POST.get('delete') == '1':
if request.POST.get('delete_confirm') == '1':
if not settings.DIRECT_EDITING:
return render(request, 'editor/feature_success.html', {})
return render(request, 'editor/feature_success.html', {
'data': signing.dumps((feature.package.name, feature.tofilename(), None))
})
feature.delete()
return render(request, 'editor/feature_success.html', {})
@ -64,17 +73,19 @@ def edit_feature(request, name):
form = FeatureForm(instance=feature, data=request.POST, feature_type=feature_type)
if form.is_valid():
if not settings.DIRECT_EDITING:
return render(request, 'editor/feature_success.html', {})
feature = form.instance
feature.feature_type = feature_type.name
feature.titles = {}
for language, title in form.titles.items():
if title:
feature.titles[language] = title
with transaction.atomic():
feature = form.instance
feature.feature_type = feature_type.name
feature.titles = {}
for language, title in form.titles.items():
if title:
feature.titles[language] = title
feature.save()
if not settings.DIRECT_EDITING:
return render(request, 'editor/feature_success.html', {
'data': signing.dumps((feature.package.name, feature.tofilename(), json_encode(feature.tofile())))
})
feature.save()
return render(request, 'editor/feature_success.html', {})
else:
@ -86,3 +97,26 @@ def edit_feature(request, name):
'path': request.path,
'new': False
})
@require_POST
def finalize(request):
if 'data' not in request.POST:
return render(request, 'editor/error.html', {
'title': _('Missing data.'),
'description': _('Edit data is missing.')
}, status=400)
package_name, file_path, file_contents = signing.loads(request.POST['data'])
package = Package.objects.filter(name=package_name).first()
hoster = None
if package is not None:
hoster = get_hoster_for_package(package)
return render(request, 'editor/finalize.html', {
'package_name': package_name,
'hoster': hoster,
'file_path': file_path,
'file_contents': file_contents
})