Allow entrances to be edited with the correct parent url. Commit changes to caves when adding a new entrance. Order entrances alphabetically

This commit is contained in:
Martin Green
2022-08-01 16:04:22 +02:00
parent fa6758b9a0
commit f491264b9e
5 changed files with 87 additions and 51 deletions

View File

@@ -19,6 +19,7 @@ from troggle.core.views import expo
from troggle.core.models.troggle import Expedition, DataIssue
from troggle.core.models.caves import CaveSlug, Cave, CaveAndEntrance, QM, EntranceSlug, Entrance, Area, SurvexStation, GetCaveLookup
from troggle.core.forms import CaveForm, CaveAndEntranceFormSet, EntranceForm, EntranceLetterForm
from troggle.core.utils import writetrogglefile, write_and_commit
from .auth import login_required_if_public
'''Manages the complex procedures to assemble a cave description out of the compnoents
@@ -187,7 +188,7 @@ def file3d(request, cave, cave_id):
# These if statements need refactoring more cleanly
if cave.survex_file:
#print(" - cave.survex_file '{}'".format(cave.survex_file))
if threedpath.is_file():
if threedpath.Pathis_file():
#print(" - threedpath '{}'".format(threedpath))
# possible error here as several .svx files of same names in different directories will overwrite in /3d/
if survexpath.is_file():
@@ -342,7 +343,8 @@ def edit_cave(request, path = "", slug=None):
ceinst.cave = cave
ceinst.save()
try:
cave.writeDataFile()
cave_file = cave.file_output()
write_and_commit([cave_file], "Online edit of %s" % cave)
# leave other exceptions unhandled so that they bubble up to user interface
except PermissionError:
message = f'CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {cave.filename}. Ask a nerd to fix this.'
@@ -375,27 +377,28 @@ def edit_entrance(request, path = "", caveslug=None, slug=None):
It does save the data into into the database directly, not by parsing the file.
'''
message = ""
if caveslug is not None:
try:
cave = Cave.objects.get(caveslug__slug = caveslug)
except:
return render(request,'errors/badslug.html', {'badslug': caveslug})
else:
cave = Cave()
if slug is not None:
try:
cave = Cave.objects.get(caveslug__slug = caveslug)
except:
return render(request,'errors/badslug.html', {'badslug': caveslug})
if slug:
entrance = Entrance.objects.get(entranceslug__slug = slug)
caveAndEntrance = CaveAndEntrance.objects.get(entrance = entrance, cave = cave)
entlettereditable = False
else:
entrance = Entrance()
caveAndEntrance = CaveAndEntrance(cave = cave, entrance = entrance)
entlettereditable = True
if request.POST:
form = EntranceForm(request.POST, instance = entrance)
entletter = EntranceLetterForm(request.POST, instance = caveAndEntrance)
#versionControlForm = VersionControlCommentForm(request.POST)
if slug is None:
entletter = EntranceLetterForm(request.POST)
else:
entletter = None
if form.is_valid() and (slug is not None or entletter.is_valid()):
if form.is_valid() and entletter.is_valid():
entrance = form.save(commit = False)
entrance_letter = entletter.save(commit = False)
if slug is None:
if entletter.cleaned_data["entrance_letter"]:
slugname = cave.slug() + entletter.cleaned_data["entrance_letter"]
@@ -407,36 +410,29 @@ def edit_entrance(request, path = "", caveslug=None, slug=None):
if slug is None:
es = EntranceSlug(entrance = entrance, slug = slugname, primary = True)
es.save()
el = entletter.save(commit = False)
el.cave = cave
el.entrance = entrance
el.save()
try:
entrance.writeDataFile()
# leave other exceptions unhandled so that they bubble up to user interface
except PermissionError:
message = f'CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {entrance.filename}. Ask a nerd to fix this.'
return render(request,'errors/generic.html', {'message': message})
except subprocess.SubprocessError:
message = f'CANNOT git on server for this file {entrance.filename}. Edits may not be committed.\nAsk a nerd to fix this.'
return render(request,'errors/generic.html', {'message': message})
entrance_file = entrance.file_output()
cave_file = cave.file_output()
write_and_commit([entrance_file, cave_file], "Online edit of %s%s" % (cave, entletter))
entrance.save()
if slug is None:
entrance_letter.save()
return HttpResponseRedirect("/" + cave.url)
else:
message = f'! POST data is INVALID {cave}'
print(message)
else:
form = EntranceForm(instance = entrance)
#versionControlForm = VersionControlCommentForm()
if slug is None:
entletter = EntranceLetterForm(request.POST)
entletter = EntranceLetterForm()
else:
entletter = None
entletter = caveAndEntrance.entrance_letter
return render(request,
'editentrance.html',
{'form': form, 'cave': cave, 'message': message,
{'form': form,
'cave': cave,
#'versionControlForm': versionControlForm,
'entletter': entletter
'entletter': entletter,
'entlettereditable': entlettereditable
})
def ent(request, cave_id, ent_letter):